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

Per qualche ragione, questo codice restituisce 1 su più server che ho provato su, ma 0 su un server specifico.preg_replace + UTF-8 non funziona su un server, ma lavora su un altro

PCRE è compilato con UTF-8 e le proprietà Unicode supporto. Quale potrebbe essere il problema?

+0

'locale' da questo server? charset predefinito dal server web? check in intestazioni "Firebug" La risposta di codifica – ZiTAL

+0

@ZiTAL È lo stesso come negli altri server: Accept-Charset: ISO-8859-1, utf-8; q = 0,7, *; q = 0.3 – Lior

+0

qual è l'ourput questo? 'print_r (mb_detect_order());' – ZiTAL

risposta

2

Possono esserci differenza tra le versioni PCRE che utilizzano PHP.

PHP e PCRE versioni: http://php.net/pcre.installation

Si dovrebbe usare 8.10+ (PHP 5.3.4+)

Version 8.10 25-Jun-2010:

  1. Aggiunto PCRE_UCP per rendere \ b, \ d, \ s, \ w e alcune classi di caratteri POSIX utilizzano le proprietà Unicode. (* UCP) all'inizio di un pattern può essere usato per impostare questa opzione. Modificato pcretest per aggiungere/W per testare questa funzione. Aggiunto REG_UCP per renderlo disponibile tramite l'interfaccia POSIX.

Edit: appena fatto alcuni test e dà 1 su PHP 5.3.10 e 0 su PHP 5.3.2 e PHP 5.3.3.

1

Potrebbe dipendere dalla versione di PCRE lib. Per rendere le cose più normalizzate, prova a utilizzare il «verbo UCP»: preg_match('/(*UCP)\b(בדיקה|מילה)\b/iu', 'זוהי בדיקה').

Ancora richiede PCRE v8.10, fornito con PHP dal 5.3.4 o quando menzionato in una bandiera compilata --with-pcre-regex=DIR.

Ref (in russian)

Problemi correlati