2012-04-08 16 views
5
echo preg_match("/\b(בדיקה|מילה)\b/iu", "זוהי בדיקה"); 

Por alguna razón, este código devuelve 1 en varios servidores que he probado, pero 0 en un servidor específico.preg_replace + UTF-8 no funciona en un servidor pero funciona en otro

PCRE está compilado con soporte UTF-8 y soporte de propiedades Unicode. ¿Cual podría ser el problema?

+0

'locale' de este servidor? juego de caracteres predeterminado del servidor web? comprobar en los encabezados "firebug" la respuesta de la codificación – ZiTAL

+0

@ZiTAL Es lo mismo que en los otros servidores: Aceptar-Charset: ISO-8859-1, utf-8; q = 0.7, *; q = 0.3 – Lior

+0

¿cuál es el rendimiento? ¿O esto? 'print_r (mb_detect_order());' – ZiTAL

Respuesta

2

Puede haber una diferencia entre las versiones de PCRE que utiliza PHP.

PHP y PCRE versiones: http://php.net/pcre.installation

Debe utilizar 8.10+ (PHP 5.3.4+)

Version 8.10 25-Jun-2010:

  1. Agregado PCRE_UCP para hacer \ b, \ d, \ s, \ w y ciertas clases de caracteres POSIX usan propiedades Unicode. (* UCP) al comienzo de un patrón se puede usar para configurar esta opción. Pcretest modificado para agregar/W para probar esta instalación. Se agregó REG_UCP para que esté disponible a través de la interfaz POSIX.

Editar: acaba de hacer algunas pruebas y le da 1 en PHP 5.3.10 y 5.3.2 0 en PHP y PHP 5.3.3.

1

Puede depender de la versión de PCRE lib. Para hacer las cosas más normalizadas, intente utilizar el «verbo UCP»: preg_match('/(*UCP)\b(בדיקה|מילה)\b/iu', 'זוהי בדיקה').

Todavía se requiere PCRE v8.10, se envía con PHP desde 5.3.4 o cuando se menciona en un indicador de compilación --with-pcre-regex=DIR.

Ref (in russian)

Cuestiones relacionadas