Domanda

Non ci sono più byte '' preg funzioni disponibili in PHP, in modo da significa che i preg_functions di default sono tutti mb sicuri? Impossibile trovare alcuna menzione nella documentazione di php.

È stato utile?

Soluzione

PCRE supporta UTF-8 e altre codifiche Unicode, ma deve essere specificato al momento della compilazione. Dalla pagina man rel="noreferrer"> :

  

L'implementazione corrente di PCRE corrisponde approssimativamente con Perl 5.10, incluso il supporto per UTF-8 stringhe codificate e Unicode proprietà di categoria generale. Tuttavia, UTF-8 e il supporto Unicode deve essere esplicitamente abilitato; non è il default. Le tabelle Unicode corrispondono a Unicode versione 5.1.

PCRE 7.9 ; il sistema potrebbe avere una versione precedente.

Dando uno sguardo al PCRE lib che viene fornito con PHP 5.2, sembra che è configurato per supportare le proprietà Unicode e UTF-8. Lo stesso per il 5.3 ramo .

Altri suggerimenti

pcre supporta utf8 out of the box, vedere la documentazione per la 'u' modificatore.

Illustrazione (\ xc3 \ xA4 è la codifica utf8 per la lettera tedesca "a")

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

ciò fa eco "@@ ¤ @", perché "\ xc3" e "\ xA4" sono stati trattati come simboli distinti

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

(nota La 'U') stampe "@@@", perché "\ xc3 \ xA4" sono stati trattati come una singola lettera.

No, non lo sono. Vedere la domanda preg_match e UTF-8 in PHP per esempio.

No, è necessario utilizzare il multibyte funzioni stringa come mb_ereg

Alcune delle mie funzioni preg più complicate:

(1 bis) convalidare il nome utente come alfanumerico + sottolineatura:

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

(1b) possibile UTF alternativa:

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

(2a) validate e-mail:

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

(2b) possibile UTF alternativa:

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

(3a) normalizzare nuove righe:

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

(3b) possibile UTF alternativa:

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

fare thse cambiamenti guardano bene?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top