[php] eviter les caractéres spéciaux

Fermé
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 - 30 juil. 2005 à 16:09
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 25 déc. 2008 à 19:20
Salut a tous !!!
Je voudrais savoir comment faire pour empécher les caractéres spéciaux en PHP???????
Merci !!!!!
A voir également:

30 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
30 juil. 2005 à 16:57
Salut,

En cas à toi de construire une fonction qui fait ça à l'aide de str_replace()
1
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
2 août 2005 à 13:31
:-)
1
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27
30 juil. 2005 à 16:47
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 ...
0
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27
30 juil. 2005 à 17:02
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é ...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
30 juil. 2005 à 17:11
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;
}
0
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27
30 juil. 2005 à 17:12
ç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
0
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27
30 juil. 2005 à 17:19
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
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
30 juil. 2005 à 17:20
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.
0
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27
30 juil. 2005 à 17:27
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 !!!
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
30 juil. 2005 à 17:28
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;
}
0
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27
30 juil. 2005 à 17:44
donc il retourne vrai si il y a les caractéres spéciaux ?????
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
30 juil. 2005 à 18:06
Voualà :-)
0
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27 > kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016
30 juil. 2005 à 18:09
mais je voi pa comment faire ...
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
30 juil. 2005 à 17:53
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....
0
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27
30 juil. 2005 à 18:15
en fait je voi pas ou placer mes actions a faire si c'est faux ... dsl si je suis chiant...
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
30 juil. 2005 à 18:23
Comme ça:

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

Je n'ai fait que définir la fonction au dessus. Et ici je l'appele.
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
31 juil. 2005 à 04:36
Oups, je me suis gourré dans ma fonction, il faut enlever le "!" dans:
if ( !strpos ($pseudo, $punct) )
0
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27
31 juil. 2005 à 13:05
MERCI !!!!!!

j'ai tout compri !!!!!!!
Max
0
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27
31 juil. 2005 à 17:58
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 !!!
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
31 juil. 2005 à 18:20
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...
0
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27
31 juil. 2005 à 18:23
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
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
31 juil. 2005 à 18:32
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 :-)
0
Maxg59 Messages postés 275 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 7 octobre 2006 27
31 juil. 2005 à 19:04
Ok mais alors pourquoi tu parle de $pseudo dans ta fonction ??


function detect_parasite($pseudo)
{
//Caractères à enlever
$puncts=array( ".",
";",
",",
":",
"!",
"?",
"/",
"&",
'\"',
"\'",
"(",
")",
"»",
"« ",
"\n",
"\r"
);

foreach($puncts as $punct)
{
if ( !strpos ($pseudo, $punct) )
return True;
}
return False;
}
0