\ w в PHP preg_replace покрывает только второй байт символов UTF-8 - PullRequest
2 голосов
/ 31 марта 2010

у нас есть этот код:

$value = preg_replace("/[^\w]/", '', $value);

, где $value в utf-8. После этого преобразования первый байт многобайтовых символов удаляется. Как заставить \ w полностью покрыть символы UTF-8?

Извините, я не очень хорошо разбираюсь в PHP

Ответы [ 5 ]

6 голосов
/ 31 марта 2010

Вы можете попробовать с модификатором / u :

Этот модификатор включает дополнительные функции PCRE, несовместимые с Perl. Строки шаблона рассматриваются как UTF-8. Этот модификатор доступен из PHP 4.1.0 или выше в Unix и из PHP 4.2.3 в win32. UTF-8 валидность шаблона проверяется начиная с PHP 4.3.5.

Если это не сработает, попробуйте

  • mb_ereg_replace - заменить регулярное выражение многобайтовой поддержкой

вместо.

2 голосов
/ 08 февраля 2012

Добавить u к регулярному выражению, чтобы включить многобайтовый режим Unicode PCRE:

$value = preg_replace("/[^\w]/u", '', $value);

Следствие

В режиме Unicode PCRE ожидает, что все является многобайтовым, и если его нет, то будет проблемы с соблюдением сроков. Поэтому, чтобы преобразовать что-либо в UTF-8 (и удалить любой необратимый мусор), мы сначала используем:

$value = iconv( 'ISO-8859-1', 'UTF-8//IGNORE//TRANSLIT', $i );

для очистки и подготовки ввода.

Поскольку все может быть закодировано в ISO-8859-1 (даже если некоторые непонятные символы отображаются неправильно), и так как большинство веб-браузеров работают в 8859 изначально (если не сказано использовать UTF-8), мы нашли эту функцию общий, безопасный и эффективный метод «взять что-нибудь, отбросить мусор и конвертировать в UTF-8».

mb_ereg_ * устарела с версии 5.3.0 - поэтому использование этих функций не является правильным способом.

1 голос
/ 31 марта 2010

попробуйте эту функцию вместо ... http://php.net/manual/en/function.mb-ereg-replace.php

0 голосов
/ 31 марта 2010

Используйте [^\w]+ вместо [^\w]

Вы также можете использовать \W вместо [^\w]

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