PHP Regex - Различный анализ на 2 серверах - PullRequest
4 голосов
/ 15 декабря 2009

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

Это код:

preg_replace('#[^\pL0-9_@-]#iu', '', '!%&abc123_æøå');

Результат на сервере A (php 5.2.6, Server Api: обработчик Apache 2.0):

abc123_æøå

Результат на сервере B (php 5.2.5, Api сервера: CGI / FastCGI):

123_

Кто-нибудь с какими-либо идеями о том, почему это различие происходит?

Ответы [ 3 ]

2 голосов
/ 15 декабря 2009

Это должно быть из-за

  • Настройки языка
  • Поддержка многобайтовых строк PHP
  • PHP mb_string.func_overload (перегрузка некоторых функций для поддержки многобайтовой поддержки)
1 голос
/ 15 декабря 2009

Вместо этого вы можете попробовать функцию mb_eregi_replace .

mb_eregi_replace('[^\pL0-9_@-]', '', '!%&abc123_æøå');

Должно работать согласованно на всех серверах, которые поддерживают многобайтовые строки, и должно устранять проблемы, которые могут возникнуть из-за разных кодировок файлов. (Теоретически, по крайней мере.)

0 голосов
/ 16 декабря 2009

Ну, это наконец-то решено. Сервер был обновлен с php 5.2.5 до 5.2.11 (все еще работает как cgi), и проблемы со старой версией исчезли.

Спасибо всем за отзывы и предложения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...