Rien d'étonnant car c'est ce que FILTER_SANITIZE_STRING est censé faire!
Si tu ne souhaites pas que les simples quotes ' et les doubles-quotes " soient transformés en entités html, tu peux adjoindre le flag FILTER_FLAG_NO_ENCODE_QUOTES à ton filtre:
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);
Maintenant, je t'invite à te demander si ce filtre est adapté à tes besoins et s'il peut s'appliquer indifféremment à tous les champs transmis en POST ou GET comme tu le fais. Peut-être faudrait-il envisager des filtres plus personnalisés. À toi de voir.
Sinon:
1 2 3
| function name_validation_regex($text) {
return (bool) preg_match("~\A [\p{Latin} ,.']+ \z~ux", $text);
} |
Voire renomme la en name_validation tout court ou en validate_name. (Le nom d'un fonction doit faire comprendre ce qu'elle fait, pas comment elle le fait.)
Le modificateur x ignore les espaces et autres caractères blancs dans la pattern sauf à l'intérieur d'une classe de caractères (ce qui tombe bien d'ailleurs).
Le modificateur u permet de gérer correctement les chaînes de caractères contenant des caractères hors de la zone ASCII: ces caractères étant codés sur plusieurs octets, sans ce modificateur, ta classe de caractères peut très bien prendre n'importe quels de ces octets pour recomposer un caractère qui n'y figure pas (ce qui peut résulter à de faux positifs). Avec le modificateur, chaque caractère est vu comme une séquence d'octets indissociables et ce méli-mélo n'est plus possible. Aussi, il force la lecture de la chaîne sujet en utf-8 et renvoie une erreur lorsque l'encodage n'est pas valide.
Partager