Этот вопрос задал вопрос о том, как определить строки UTF-8. Как определить, нужно ли применять utf8 для декодирования или кодирования строки?
Решением было следующее:
if (preg_match('!!u', $string)) { // this is utf-8 } else { // definitely not utf-8 }
Я не смог понять, как разбить выражение «!! u». Я нажал на весь материал PHP PCRE и, возможно, пропустил описание для «!». знаки и «u» -мероприятия. Я попытался запустить его через Perl в YAPE :: Regex :: Объяснение (как видно из объяснения этого регулярного выражения в Perl ) и не смог получить что-то, что имело смысл [я не эксперт perl – не знаю, подал ли я его правое выражение / строка].
Итак … как работает preg_match('!!u', $string)
?
Это просто пустое регулярное выражение. !
является разделителем, а u
является modfier .
Что касается того, почему это работает, из описания PHP-руководства модификатора u
(выделение мое):
Этот модификатор включает дополнительные функции PCRE, которые несовместимы с Perl. Строки шаблонов рассматриваются как UTF-8. Этот модификатор доступен с PHP 4.1.0 или выше в Unix и с PHP 4.2.3 на win32. Срок действия шаблона UTF-8 проверяется с PHP 4.3.5.
!
используется как разделитель вместо /
. Я переписал это для вас, //u
это то же самое. u
является модификатором, который обрабатывает шаблон как utf8.