Bonjour,
J'essaie d'écrire une fonction qui me renvoie true si la chaine passée en argument est considérée comme correcte, false sinon. Elle est destinée à être utilisée pour traiter toutes les données venant des formulaires.
Sont considérés comme corrects les caractères suivants:
a-z A-Z 0-9 '
J'ai donc écrit:
note: le (\') est là car, pour une raison que j'ignore, mon script récupère \' quand je tape ' dans mon champ de texte de formulaire, comme s'il addslashait automatiquement (option du serveur?).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 function isCorrectString($str){ return ereg("^[a-zA-Z0-9'(\')èéàç]+$", $str); }
Le problème est que les chaines avec des accents donnent un retour à false au lieu de true. J'ai testé différentes façon d'écrire l'expression régulière mais rien n'y fait.
De même, ereg("[èéàç]", $str); renvoie toujours false, même quand je tape une chaine contenant un ou plusieurs caractères accentués.
Le serveur apache sur lequel le code php s'execute est en ISO8859-1. J'ai essayé un setlocale(LC_ALL,'fr-FR.ISO8859-1'); en début de code php mais ça ne change rien.
Je suis assez désemparé car c'est pour projet important pour moi et la sécurité se doit d'être forte, je tiens vraiment à limiter l'étendue des caractères acceptés dans une chaîne (seul le ' est autorisé, mais la chaine est soumise ensuite à mysql_escape_string()).
Si quelqu'un connaît ou soupçonne la raison de ce comportement de php, j'apprécierais énormément votre aide.
Partager