Pregunta

No hay varios bytes '' preg funciones disponibles en PHP, por lo que ¿significa que los preg_functions por defecto son todos mb seguro? No se pudo encontrar ninguna mención en la documentación de PHP.

¿Fue útil?

Solución

PCRE puede soportar UTF-8 y otras codificaciones Unicode, pero tiene que ser especificado en tiempo de compilación. Desde la página del rel="noreferrer"> :

  

La implementación actual de PCRE corresponde aproximadamente con Perl 5.10, incluyendo soporte para UTF-8 cadenas codificadas y Unicode propiedades categoría general. Sin embargo, UTF-8 y el soporte Unicode tiene que ser activado de forma explícita; no es el predeterminado. Las tablas Unicode corresponden a Unicode versión 5.1.

PHP utiliza actualmente PCRE 7.9 ; el sistema podría tener una versión anterior.

Echando un vistazo a la PCRE lib que viene con PHP 5.2, parece que está configurado para soportar propiedades Unicode y UTF-8. Lo mismo para el 5.3 rama .

Otros consejos

pcre soporta UTF-8 fuera de la caja, véase la documentación de la 'U' modificador.

Ilustración (\ xc3 \ XA4 es la codificación UTF-8 para la letra alemana "A")

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

este eco "@@ ¤ @" porque "\ XC3" y "\ XA4" fueron tratados como símbolos distintos

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

(tenga en cuenta las 'U') impresiones "@@@" porque "\ xc3 \ XA4" fueron tratados como una sola letra.

No, no lo son. Ver la pregunta preg_match y UTF-8 en PHP por ejemplo.

Algunos de mis funciones preg más complicados:

(1a) validar nombre de usuario como alfanumérico + subrayado:

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

(1b) posible alternativa UTF:

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

(2a) de correo electrónico de validación:

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

(2b) posible alternativa UTF:

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

(3a) normalizar saltos de línea:

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

(3b) posible alternativa UTF:

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

Haz thse cambios se ven bien?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top