-
Formulaire en UTF-8
Bonjour,
Tout d'abord, l'ensemble du site à un charset en UTF-8, c'est de même pour la base de donnée.
Toute les données du formulaire sont soumis à un filtre avant d'être envoyées vers la base de donnée.
C'est à ce moment que je pêche !!!
Pour être soumis au filtre, il faudrait que les lettres étrangères (arabe, asiatique etc.) soient redéfinies dans le format &#xxxx;
Malheureusement, je n'arrive pas à faire cette transformation...
Auriez vous une idée simple ?
@ bientôt et merci...
-
Voici une petite fonction dénichée sur le site officiel de PHP.
string utf8_encode ( string data )
Ca devrait faire l'affaire.
-
Bonjour,
J'ai déjà pensé à cette fonction ainsi que le utf8_decode(), htmlentities() et html_entity_decode()
Seulement à l'affichage, je voudrais avoir &#xxxx; hors j'ai des signes incomprehensible.
Ce qui est bizarre, c'est que dans ma fonction regexp, cela fonctionne bien, il y a peut-être une interprétation qui se fait en arrière plan et qu'on ne peut afficher normalement...
Merci @+
-
Tu ne peux pas modifier le filtre pour accepter les caractères tels quels directement ? C'est normalement un des points forts de l'utilisation d'UTF-8 non ?
-
C'est l'une des questions que je me pose...
Sachant que la composante de base du filtre utilise [:alnum:], je me demande si cette directive n'inclut pas déjà les lettres en UTF-8, mais je n'ai rien trouvé sur le net, mise à part que ça concerne les caractères alpha-numérique...
Actuellement mon filtre accepte les caractères en UTF-8 tels quels, mais j'aimerais être sûr que ce n'est pas un bug.
En tout cas je ne peux pas mettre dans le filtre l'ensemble des caractères mondiaux, ça serait trop lourd, donc si [:alnum:] inclut bien ses caractères, alors c'est tout bon :-)
A bientôt...
-
Oui mais ce filtre c'est quoi exactement ? Une classe PHP ?
-
Oui une petite fonction personnalisée :
Code:
eregi('^[[:alnum:]\&\#\;]{1,30}$', htmlentities($string));
Par exemple pour le champ "username" mais acceptant tous les caractères (lettres) étrangers.
A bientôt...
-
J'ai l'impression de ne pas saisir. Tu veux filtrer quoi exactement ?
En fait l'utf-8 te permet justement de ne pas avoir à encoder tes caractères sous forme d'entités HTML &#... donc je n'ai pas l'impression que ton filtre ait un quelquonque interret.
Ce qu'il faut faire si tu souhaites autoriser seulement certains caractères, alors défini un array des caractères autorisés, sans leur transformation en entité HTML on est bien d'accord, et ensuite tu compare ce que tu recois aux caractères autorisés du genre avec une expression régulière.
un array du style:
Code:
array('@', 'è', 'é', 'à') etc...
Peut etre que quelqu'un a une meilleure méthode, mais c'est comme ca que je ferai moi en tous cas.
Au pire tu peux faire le contraire et définir un array de ce qui n'est pas autorisé. En tout cas en matière de filtrage, ce qui est interressant c'est surtout de filtrer du code HTML ou javascript afin d'éviter toute injection, mais dans ce cas la méthode est la même partout que ca soit UTF-8 ou un autre encodage.
-
J'aurais fait aussi un arrray dans ce cas...
Pour mieux expliquer :
Lorsqu'un arabe écrit avec un clavier arabe (donc caractères arabes), je dois pouvoir filtrer le champs qu'il aura renseigné...
Pour prendre un exemple simple, un champ textarea pour écrire un message, cet arabe écrit son message, donc tous les caractères sont en arabe.
Le message (lettre espace lettre) est par exempe : س ز
Si je veux supprimer la première lettre, je dois pouvoir la filter et donc d'abord la tranformer dans un format plus simple, à savoir pour ce cas. Hors je n'ai pas trouvé de solution simple qui me permet de faire cela.
On pourrait par exemple appliquer cela sur un filtrage de mot interdit dans un message sur un forum ou d'autres exemple de ce type.
Enfin voilà, si tu as la solution ou quelqu'un qui passe ici, je suis preneur.
@ bientôt...
-
Bonjour,
J'ai trouvé ce qu'il me fallait, la solution :
Code:
mb_convert_encoding($string, "HTML-ENTITIES", "UTF-8")
Explication :
Chaque chaine en UTF-8 est convertit en caractères Unicode/html de forme &#xxxx; ou &xxxx;
A bientôt...