Question

Il n'y a pas multioctets « preg » fonctions disponibles en PHP, alors est-ce que cela signifie les preg_functions par défaut sont tous les mb sécurité? Impossible de trouver aucune mention dans la documentation php.

Était-ce utile?

La solution

PCRE peut prendre en charge UTF-8 et d'autres encodages Unicode, mais il doit être spécifié au moment de la compilation. De la page de manuel pour PCRE 8.0 :

  

La mise en œuvre actuelle du PCRE correspond approximativement à 5,10 Perl, y compris le support de caractères UTF-8 chaînes codées et les propriétés de la catégorie générale Unicode. Cependant, UTF-8 et le support Unicode doit être explicitement activée; il n'est pas la valeur par défaut. Les tables Unicode correspondent à libérer Unicode 5.1.

PHP utilise actuellement PCRE 7,9 ; votre système pourrait avoir une version plus ancienne.

Un regard sur la PCRE lib qui vient avec PHP 5.2, il semble qu'il est configuré pour supporter les propriétés Unicode et UTF-8. Idem pour le 5.3 branche .

Autres conseils

PCRE prend en charge UTF8 hors de la boîte, voir la documentation pour le modificateur 'u'.

Illustration (\ xc3 \ XA4 est l'encodage UTF8 pour la lettre allemande "A")

  echo preg_replace('~\w~', '@', "a\xC3\xA4b");

ce qui répond à "@@ ¤ @" parce que "\ xc3" et "\ XA4" ont été traités comme des symboles distincts

  echo preg_replace('~\w~u', '@', "a\xC3\xA4b");

(notez les 'u') imprime "@@@" parce que "\ xc3 \ XA4" ont été traités comme une seule lettre.

Non, ils ne sont pas. Voir la question preg_match et UTF-8 en PHP par exemple.

Non, vous devez utiliser le fonctions de chaîne multi-octets comme mb_ereg

Certains de mes fonctions preg plus compliquées:

(1a) valider le nom d'utilisateur en tant que trait de soulignement alphanumérique +:

preg_match('/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/',$username) 

(1b) possible UTF alternatif:

preg_match('/^[A-Za-z][A-Za-z0-9]*(?:_[A-Za-z0-9]+)*$/u',$username) 

(2a) email de validation:

preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix",$email))

(2b) possible UTF alternatif:

preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ixu",$email))

(3a) normaliser les nouvelles lignes:

preg_replace("/(\n){2,}/","\n\n",$str);

(3b) possible UTF alternatif:

preg_replace("/(\n){2,}/u","\n\n",$str);

Est-ce thse changements semblent bien?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top