2011-09-17 8 views
6

Tengo un código en una aplicación PHP que devuelve nulo cuando intento usarlo en el servidor de producción, pero funciona bien en el servidor de desarrollo. Aquí está la línea de código:¿De qué depende el indicador preg_match_all `u`?

// use the regex unicode support to separate the UTF-8 characters into an array 
preg_match_all('/./us', $str, $match); 

¿Cuál es la bandera u dependiente? Probé con mb_string habilitado y deshabilitado y no parece afectarlo.

El error que estoy recibiendo es

preg_match_all: Compilation failed: unknown option bit(s) set at offset -1

más información

esta es una de las opciones en el servidor prodction:

'--with-pcre-regex=/opt/pcre'

y aquí son las secciones de pcre

Picture.png http://img829.imageshack.us/img829/8524/pictureke.png

Creo que esta es la @Wesley nota se refería a:

In order process UTF-8 strings, you must build PCRE to include UTF-8 
support in the code, and, in addition, you must call pcre_compile() 
with the PCRE_UTF8 option flag, or the pattern must start with the 
sequence (*UTF8). When either of these is the case, both the pattern 
and any subject strings that are matched against it are treated as 
UTF-8 strings instead of strings of 1-byte characters. 

Cualquier enlace o consejos sobre cómo "construir para incluir PCRE UTF-8"?

via

resultados de pcretest -C

PCRE version 6.6 06-Feb-2006 
Compiled with 
    UTF-8 support 
    Unicode properties support 
    Newline character is LF 
    Internal link size = 2 
    POSIX malloc threshold = 10 
    Default match limit = 10000000 
    Default recursion depth limit = 10000000 
    Match recursion uses stack 
+0

¿Está probando contra una variable o un valor constante? Tu ejemplo tiene una variable, creo que deberías probar con una constante para asegurarte de que haces lo mismo en dev y en vivo. – hakre

+1

http://php.net/manual/en/reference.pcre.pattern.modifiers.php, vea los comentarios también. –

Respuesta

1

Depende de la PCRE están compilando con --enable-utf8.

+0

esto suena bien, ¿pueden dar más detalles? No veo eso en php_info para la máquina de desarrollo o producción. – cwd

4

Este indicador depende de que PCRE se haya creado con soporte Unicode habilitado.

PHP agrupa esta biblioteca y normalmente está construida con soporte Unicode habilitado: El modificador u está disponible y siempre funciona desde PHP 4.1.0, cuando PHP se genera con la biblioteca PCRE incluida.

Sin embargo, algunas distribuciones de Linux compilan PHP contra su propia compilación de PCRE, que no tienen habilitada la compatibilidad con Unicode, y como resultado el modificador u no funciona en esas compilaciones.

La solución es utilizar un paquete PHP alternativo.

+0

¿Qué debo buscar para saber si está habilitado y qué idioma uso para decirle al administrador de sistemas que lo necesito? Creo que el sistema se basa en CentOS. – cwd

+0

Se podría buscar la macro PCRE_UTF8 ser definido o no en /usr/include/pcre.h – arnaud576875

+0

no tengo acceso root en la máquina de producción, pero no puedo entrar en/usr/include y pcre.h no está allí . también actualizó la pregunta con más información. – cwd

Cuestiones relacionadas