Различия PHP PCRE в тестировании и хостинге серверов - PullRequest
2 голосов
/ 23 апреля 2010

У меня есть следующее регулярное выражение, которое отлично работает на моем тестовом сервере, но просто возвращает пустую строку на моем размещенном сервере.

$text = preg_replace('~[^\\pL\d]+~u', $use, $text);

Теперь я уверен, что это сводится к тому, что версия PCRE на хост-сервере не компилируется с включенной поддержкой свойств Unicode. Различия в двух версиях заключаются в следующем:

Мой сервер:

PCRE version 7.8 2008-09-05
Compiled with
UTF-8 support
Unicode properties support
Newline sequence is LF
\R matches all Unicode newlines
Internal link size = 2
POSIX malloc threshold = 10
Default match limit = 10000000
Default recursion depth limit = 10000000
Match recursion uses stack

Хостинг-сервер:

PCRE version 4.5 01-December-2003
Compiled with
UTF-8 support
Newline character is LF
Internal link size = 2
POSIX malloc threshold = 10
Default match limit = 10000000
Match recursion uses stack

Также обратите внимание, что версия на хост-сервере (та же версия, с которой скомпилирован PHP) довольно старая.

Что меня смущает, так это то, что pcretest не работает на обоих серверах из командной строки с

re> ~[^\\pL\d]+~u
** Unknown option 'u'

хотя это регулярное выражение прекрасно работает при запуске из PHP на моем сервере.

Итак, я полагаю, мои вопросы: не работает ли регулярное выражение на хост-сервере из-за отсутствия свойств Unicode? Или я скучаю по чему-то еще?

Спасибо всем, Gaz.

Ответы [ 3 ]

2 голосов
/ 24 апреля 2010

PCRE 4.5 поддерживает UTF-8, но не поддерживает свойства Unicode, такие как \pL, и не поддерживает флаг /u, который их разрешает. Вам нужно обновить PCRE на вашем сервере до версии 5.0 или выше. Вам также может понадобиться обновить PHP, чтобы иметь поддержку /u в preg_replace().

2 голосов
/ 23 апреля 2010

Скорее всего, на PCRE на хост-сервере не включена поддержка UTF8.

pcretest использует разные опции. Это «8» для UTF-8 вместо «и». Вот причина ошибки.

Также обратите внимание, что разные библиотеки PCRE могут использоваться в версиях Apache или CLI PHP на одном компьютере.

0 голосов
/ 23 апреля 2010

ответить на ваши вопросы; и да и нет. Я считаю, что PCRE 5.0 был порогом, когда эта поддержка UTF8 стала доступной.

...