2009-09-23 5 views
-1

Si je le fais, preg_replace ('/ [^ a-zA-Z0-9 \ s -_] /', '', $ val) dans une application multilingue, va-t-il gérer des choses comme des caractères accentués ou des caractères russes ? Si non, comment puis-je filtrer l'entrée de l'utilisateur pour autoriser uniquement les caractères ci-dessus, mais avec une sensibilité locale?comment la prise en compte des paramètres régionaux est preg_replace dans PHP?

merci!

codecowboy. Non, il ne correspondra que au caractère ASCII A-Z

Répondre

1

La seule information utile que je peux trouver est de this page of the manual, qui stipule:

caractère Un « mot » est une lettre ou chiffre ou le caractère de soulignement, qui est, n'importe quel caractère qui peut être partie d'un «mot» Perl. La définition des lettres et des chiffres est contrôlée par les tables de caractères de PCRE, et peuvent varier si l'appariement spécifique aux paramètres régionaux prend . Par exemple, dans les paramètres régionaux "fr" (français), certains codes de caractères supérieurs à 128 sont utilisés pour les lettres accentuées , et ceux-ci sont appariés par \ w.

encore, je ne parierais pas que cela fonctionne comme vous voulez ...

Mais, pour être sûr:

  • en utilisant peut-être unicode matching serait mieux
  • Vous aurez probablement à essayer d'être certain ...

À propos de l'unicode, le manuel dit ceci:

Les caractères correspondants par la propriété Unicode n'est pas rapide, car PCRE a pour rechercher une structure qui contient données pour plus de quinze mille caractères. C'est pourquoi les séquences d'échappement classiques telles que \ d et \ w n'utilisent pas les propriétés Unicode dans PCRE.

Ainsi, il pourrait être une solution plus sûre ... curieux à ce sujet, dois-je ajouter ^^

Questions connexes