[php] eviter les caractéres spéciaux
Je voudrais savoir comment faire pour empécher les caractéres spéciaux en PHP???????
Merci !!!!!
--
Merci !!!
Max
30 réponses
Empêcher les caractères spéciaux en PHP est discuté pour les pseudos et les mots de passe lors de l’inscription, afin de prévenir les entrées malveillantes et de proposer une validation côté serveur. Parmi les solutions évoquées, on voit la construction d’une fonction personnalisée utilisant str_replace ou un tableau de ponctuations et une boucle, puis l’appel de cette vérification au moment de l’inscription. Des exemples montrent une fonction detect_parasite qui repère les caractères interdits via strpos sur un tableau de signes et qui déclenche une réponse côté serveur lorsque des caractères sont détectés. D'autres retours indiquent que la méthode ne fonctionne pas pour toutes les variables et demandent d'étendre la vérification à plusieurs champs sans alourdir le code.
-
Bonjour!
Ce post est peut être un peu vieux mais lorsque je teste ce script, il ne me repère pas les caractères spéciaux lorsqu'ils sont placé en première position... Donc ma question est comment faire pour repérer le premier caractère de la chaine!?
J'espère que quelqu'un verra ce message ! Et merci pour ce script! -
Modérateur:-)
-
Merci merci merci merci !!!!!
-
ModérateurVoui, tu as die() ou exit()
http://fr.php.net/manual/fr/function.exit.php -
OK merci ça marche !!!
Mais lorseque il detecte le caractere interdit dans le pseudo il continu ...
Tu n'as pas une commande pour finir le script ???
comme ça je fait
if ( detect_parasite($passe) )
{
echo"blablablabla";
==>finir le script
} -
ModérateurRemplace
elseif ( detect_parasite($passe) )
par
if ( detect_parasite($passe) )
Sinon, s'il trouve un caractère spécial pour $pseudo, il ne fera pas le test pour $pass.... -
SVP repondez moi vite je suis bloqué !!!!!SVP !!
-
désolé mais ça marche pas ....
voici mon code :function detect_parasite($pseudo) { //Caractères à enlever $puncts=array( ".", ";", ",", ":", "!", "?", "/", "&", '\"', "\'", "(", ")", "»", "« ", "\n", "\r" ); foreach($puncts as $punct) { if ( strpos ($pseudo, $punct) ) return True; } return False; } //-------------------------------------------------- //verif pseudo if ( detect_parasite($pseudo) ) { //Action si mauvaise ponctuation echo "Votre pseudo contient des caractéres spéciaux"; echo "<a href='inscription.htm'>retour</a>"; } elseif ( detect_parasite($passe) ) { echo "Votre mot de passe ne doit pas contenir de caracteres speciaux"; echo "<a href='inscription.htm'>retour</a>"; }
ça marche bien pour le pseudo mais pas pour le $passe ....
ça a marcher une fois ...
désolé je sais que je suis chiant !!!!!!! -
Donc ça pose pas de problémes si j'utilise
$vars=array($pseudo , $passe, $passe2); foreach ($vars as $one_var) { if (detect_parasite($one_var) { //Action si mauvaise ponctuation } }
Sans chager $pseudo dans la fonction ???
Si j'ai bien compri... Lorseque j'apel la fontion je change $pseudo par se que je veu ???? -
ModérateurAh je crois comprendre, tu t'es emmelé les pinceaux parce que j'utilise le mot $pseudo dans la definition et dans l'appel de la fonction.
Dans l'exemple que tu viens de mettre, j'utilise $pseudo, c'est l'argument à passer à la fonction.
Après tu pourras passer n'importe quelle variable lors de l'appel de ta fonction:
detect_parasite($ostreiculture);
detect_parasite($muesli)
detect_parasite($yahourt_en_pate_a_macher)
J'ai réutilisé $pseudo comme une variable lambda.... -
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;
} -
ModérateurAlors 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 :-) -
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 -
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 !!!-
ModérateurComment 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...
-
-
MERCI !!!!!!
j'ai tout compri !!!!!!!
Max -
ModérateurOups, je me suis gourré dans ma fonction, il faut enlever le "!" dans:
if ( !strpos ($pseudo, $punct) )
-
ModérateurComme ça:
if (! detect_parasite($pseudo) ) { //Action }
Je n'ai fait que définir la fonction au dessus. Et ici je l'appele. -
en fait je voi pas ou placer mes actions a faire si c'est faux ... dsl si je suis chiant...
-
ModérateurTu 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.... -
donc il retourne vrai si il y a les caractéres spéciaux ?????
-
-
@kilianmais je voi pa comment faire ...
-
- 1
- 2