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

Z jakiegoś powodu ten kod zwraca 1 na kilku serwerach, na których testowałem, ale 0 na jednym określonym serwerze.preg_replace + UTF-8 nie działa na jednym serwerze, ale działa na innym

PCRE jest skompilowany z obsługą UTF-8 i obsługą właściwości Unicode. Co może być problemem?

+0

'locale' z tego serwera? domyślny zestaw znaków z serwera WWW? sprawdź nagłówki "firebug" odpowiedź kodowania – ZiTAL

+0

@ZiTAL To samo co na innych serwerach: Accept-Charset: ISO-8859-1, utf-8; q = 0.7, *; q = 0.3 – Lior

+0

jaki jest nasz potencjał os to? 'print_r (mb_detect_order());' – ZiTAL

Odpowiedz

2

Może być różnica między wersjami PCRE, których używa PHP.

PHP i PCRE wersje: http://php.net/pcre.installation

Należy użyć 8.10+ (PHP 5.3.4+)

Version 8.10 25-Jun-2010:

  1. Dodany PCRE_UCP aby \ b \ d \ s, \ w i pewne klasy znaków POSIX używają właściwości Unicode. (* UCP) na początku wzorca można użyć do ustawienia tej opcji na . Zmodyfikowano metodę PCretest, aby dodać/W, aby przetestować ten obiekt. Dodano REG_UCP, aby udostępnić go poprzez interfejs POSIX.

Edit: Wystarczy zrobić kilka testów i daje 1 na PHP 5.3.10 i 0 na PHP 5.3.2 i PHP 5.3.3.

1

Może to zależeć od wersji biblioteki PCRE. Aby bardziej znormalizować sytuację, spróbuj użyć "czasownika UCP": preg_match('/(*UCP)\b(בדיקה|מילה)\b/iu', 'זוהי בדיקה').

Nadal wymaga PCRE v8.10, dostarczanego z PHP od 5.3.4 lub wymienionego na flagę kompilacji --with-pcre-regex=DIR.

Ref (in russian)

Powiązane problemy