Rechercher : dans
Par :

[php] eviter les caractéres spéciaux

Dernière réponse le 25 déc 2008 à 19:20:39 Maxg59, le 30 jui 2005 à 16:09:09 
 Signaler ce message aux modérateurs

Salut a tous !!!
Je voudrais savoir comment faire pour empécher les caractéres spéciaux en PHP???????
Merci !!!!! Merci !!!
Max

Meilleures réponses pour « [php] eviter les caractéres spéciaux » dans :
[CCM] Utiliser des caractères spéciaux VoirVous pouvez utiliser des caractères spéciaux dans vos messages sur les forums de CCM. Vous pouvez: Soit utiliser la table de caractères Windows (charmap.exe) et copier-coller les caractères dans le message. Soit utiliser les entités...
Oracle - Echappement de caractères spéciaux VoirPour certaines requêtes SQL, nous avons besoin de rechercher des chaînes de caractères contenant des caractères spéciaux tels que '%' Dans l'exemple suivant, qui est faux, le besoin est de trouver les enregistrements contenant au milieu le...
Utiliser des accents et autres caractères spéciaux VoirDans la plupart des langages de programmation, on ne peut utiliser directement les accents et autres caractères non-anglosaxon. La solution est l'unicode, une sorte de code universel. Par exemple pour afficher la chaine de caractères : " là, ça...
Caractères spéciaux HTML VoirCodage des caractères spéciaux Le standard HTML demande de respecter le codage des caractères ASCII 7 bits, c'est-à-dire que les caractères accentués ne sont pas autorisés. Il faut pour cela utiliser un codage particulier. Pour...

1

dedale82, le 30 jui 2005 à 16:27:50
Répondre à dedale82

2

Maxg59, le 30 jui 2005 à 16:47:14

Salut !!!
merci mais je crois que j'ai mal expliqué :
je voudrais empécher mes visiteurs, lors de leur inscription de mettre des "'²&~"#'{([-|\_^çà@ dans leurs pseudo ... Merci !!!
Max

Répondre à Maxg59

3

kilian, le 30 jui 2005 à 16:57:47

Salut,

En cas à toi de construire une fonction qui fait ça à l'aide de str_replace()

Répondre à kilian

4

Maxg59, le 30 jui 2005 à 17:02:39

Je ne comprend pas grand chose a cette fonction ....
tu aurais une autre page qui explique un peu plus facile ... ou juste un exemple commenté ... Merci !!!
Max

Répondre à Maxg59

5

kilian, le 30 jui 2005 à 17:11:19

Str_replace fonctionne comme ceci:
str_replace("sous-chaine à remplacer","sous-chaine de remplacement","chaine entière concernée");
Et str_replace ne modifie pas directement la chaine entière concernée, par contre il retourne, comme valeur, la chaine modifiée.
Donc il suffit d'affecter ce retour à la variable qui contient la chaine concernée. Schematiquement:

$chaine_entière_concernée=str_replace("sous-chaine à remplacer","sous-chaine de remplacement",$chaine_entière_concernée); 


Je te file une fonction que j'ai faite hier.
Voici en gros ce que ça donnerait avec certains caractères:
function clean_msg($raw_string)
{
        //Caractères à enlever
	$puncts=array(	".",
			";",
			",",
			":",
			"!",
			"?",
			"/",
			"&",
			'\"',
			"\'",
			"(",
			")",
			"»",
			"« ",
			"\n",
			"\r"
			);
        /*Pour chaque itération de la boucle, un caractère spécial
       concerné */
	foreach($puncts as $punct)
	{
                //Remplacement du caractère concerné
                /*On le remplace par une absence de caractère, donc
                on le supprime */
		$raw_string=str_replace($punct,"",$raw_string);
	}
	// La fonction retourne la chaine modifiée
	return $raw_string;
}

Répondre à kilian

6

Maxg59, le 30 jui 2005 à 17:12:10

ça y est ! j'ai compri mais je ne voi toujours pas comment empécher de mettre des caractéres spéciaux , cette fonction remplace, il m'en faudrait une qui renvoi vrai si certains caractéres se trouvent dans une chaine ;-)
Merciii Merci !!!
Max

Répondre à Maxg59

7

Maxg59, le 30 jui 2005 à 17:19:44

Je vais utiliser strpos mais bon ça va être long et ça va faire beaucoup de if , else elseif etc ....
merci quand même !!!!!
Max Merci !!!
Max

Répondre à Maxg59

8

kilian, le 30 jui 2005 à 17:20:53

En ce cas tu as juste à utiliser strpos():
http://fr2.php.net/manual/fr/function.strpos.php

Elle renvoie Faux si elle ne trouve pas une sous-chaine.
Il suffit d'utiliser le même genre de fonction que la mienne.
Sauf que si dans ta boucle strpos revoie autre chose que False, alors tu peux faire un return dans ta fonction:
return True;
Qui aura l'avantage d'interrompre ta fonction et d'indiquer si un caractère est présent ou non.
Et après ta boucle, tu peux mettre :
return False;
Si une sous chaine parasite n'a pas été trouvée, les instructions après boucle s'executeront et tomberont de suite sur ton return True.

Voilà voilà. Dis le moi si j'explique mal.

Répondre à kilian

9

Maxg59, le 30 jui 2005 à 17:27:24

Non non tu explique bien mais je pense que je n'ai pas encore le niveau... je pense plus qu'il faut apprendre au fur et a mesure des besoins donc il y a beaucoup de choses que je ne connais pas encor mais j'en apprend tout les jours !!!!
j'en profite pour te dire vraiment merci car tu m'aide vraiment beaucoup !!! heuresement que tu es la sinon je ne serais pas dans la m***e ...
Si tu as le temp tu pourrais m'expliquer return car je pense que c'est un truc que je devrais connaitre et qui me faciliterai beaucoup de choses !!! Merci !!!
Max

Répondre à Maxg59

10

kilian, le 30 jui 2005 à 17:28:27

Pas besoin d'une centaine de if:

function detect_parasite($pseudo)
{
        //Caractères à enlever
	$puncts=array(	".",
			";",
			",",
			":",
			"!",
			"?",
			"/",
			"&",
			'\"',
			"\'",
			"(",
			")",
			"»",
			"« ",
			"\n",
			"\r"
			);
 
	foreach($puncts as $punct)
	{
                if ( !strpos ($pseudo, $punct) )
		        return True;
	}
	return False;
}

Répondre à kilian

11

Maxg59, le 30 jui 2005 à 17:44:43

Donc il retourne vrai si il y a les caractéres spéciaux ????? Merci !!!
Max

Répondre à Maxg59

13

kilian, le 30 jui 2005 à 18:06:02

Voualà :-)

Répondre à kilian

14

Maxg59, le 30 jui 2005 à 18:09:38

Mais je voi pa comment faire ... Merci !!!
Max

Répondre à Maxg59

12

kilian, le 30 jui 2005 à 17:53:05

Tu vas voir, le return c'est pas très compliqué.

Une fonction doit toujours retourner une valeur.
Tout comme une variable, cette valeur peut être de plusieurs type.
On a du bol avec le Php, on a pas besoin de gérer les types.
Donc ça se passe en arrière plan.

Mais avec des langages de plus bas niveau comme le C, les fonction et les variables ont toujours un type que l'on doit déclarer soi-même.
Traditionnelement c'est:
_Entiers
_Nombre Réels
_Caractères (ou chaine de caractère si le langage les supporte directement).

Et accessoirement tu peux avoir les booléens (vrai/faux) et pour certains langages les dates, les objets etc...

Tu peux direcetement stocker cette valeur de retour ou l'utiliser comme tu veux:
$variable=fonction($argument);
fonction2( fonction($argument) );

Comme tu peux le voir, l'appel d'une fonction se comporte comme une variable => c'est une valeur.
Donc comme au dessus, tu peux l'utiliser comme tu veux, comme argument d'une fonction, ou comme valeur à affecter à une variable etc...

Et cette valeur représentée par une fonction appelée c'est ce qui est retourné par le "return".
De toute façon c'est bête une fonction: c'est juste un machin qui prend une valeur en entrée. Il fait des opérations sur cette valeur, et renvoie une valeur de sortie.

Un autre avantage du return est que cette instruction interrompt le déroulement de la fonction.
L'autre avantage est utilisé dans les conditions:
Si une fonction retourne False, ou 0 ou NULL, tu peux te servir de l'opérateur !

if (! fonction($argument) )
                    / /alors faire machin truc

Ca signifie: si cette fonction retourne 0 ou false ou NULL (ou qu'elle est vide, ou qu'elle n'a pas été initialisée) alors executer les instructions du bloc conditionnel.

A l'inverse :
if ( fonction($argument) )
                     //Alors faire machin truc)

Ca signifie: si une fonction retourne un nombre autre que 0, ou une chaine de caractère, ou un objet, ou True alors executer le bloc conditionnel.

En gros, le "!" représente "Faux" ou vide....Tu peux tout à fait appliquer ce principe aux variables aussi....

Répondre à kilian

15

Maxg59, le 30 jui 2005 à 18:15:47

En fait je voi pas ou placer mes actions a faire si c'est faux ... dsl si je suis chiant... Merci !!!
Max

Répondre à Maxg59

16

kilian, le 30 jui 2005 à 18:23:19

Comme ça:

 if (! detect_parasite($pseudo) )
{
         //Action
}

Je n'ai fait que définir la fonction au dessus. Et ici je l'appele.

Répondre à kilian

17

kilian, le 31 jui 2005 à 04:36:44

Oups, je me suis gourré dans ma fonction, il faut enlever le "!" dans:

if ( !strpos ($pseudo, $punct) )

Répondre à kilian

18

Maxg59, le 31 jui 2005 à 13:05:40

MERCI !!!!!!

j'ai tout compri !!!!!!!
Max

Répondre à Maxg59

19

Maxg59, le 31 jui 2005 à 17:58:00

Salut
dsl si je suis chiant mais bon ... je n'ose pas essayé de retoucher la fonction que tu m'as donner car je n'ai pas du tout le niveau !!!

Comment faire pour que la fonction empecher les caractéres spéciaux de plusieurs variables ?????

Merci d'avance !!! Merci !!!
Max

Répondre à Maxg59

20

kilian, le 31 jui 2005 à 18:20:08

Comment faire pour que la fonction empecher les caractéres spéciaux de plusieurs variables ?????

Je comprend pas bien.... C'est à dire?

En fait ma fonction empêche certains caractères mais c'est à titre d'exemple. Ce ne sont pas les caractères que tu voulais.
J'ai juste crée un tableau qui contient chaque ponctuation. Mais tu peux modifier ce tableau. Chaque ponctuation de ce tableau sera vérifiée...

Répondre à kilian

21

Maxg59, le 31 jui 2005 à 18:23:18

En fait je voudrais pour utiliser ta fonction pour empécher des caractéres spéciaux dans :
ma variable $pseudo , $passe $passe2 etc ....
les caractéres spéciaux je les changerai aprés Merci !!!
Max

Répondre à Maxg59

22

kilian, le 31 jui 2005 à 18:32:35

Alors il suffut d'utiliser la fonction pour chacune de ces variables et de vérifier la valeur qu'elle retourne:

 if ( detect_parasite($pseudo) )
{
               //Action si mauvaise ponctuation
}
if ( detect_parasite($passe) )
{
               //Action si mauvaise ponctuation
}

Etc...

Tu peux aussi utiliser foreach pour alléger le code:

$vars=array($pseudo , $passe, $passe2);
foreach ($vars as $one_var)
{
          if (detect_parasite($one_var)
          {
                    //Action si mauvaise ponctuation
          }
}

Si tu ne connais pas bien foreach, je te conseille d'aller voir sur le site de Php, c'est très pratique comme truc :-)

Répondre à kilian