一尘不染

PHP中的preg_match和UTF-8

php

我正在尝试使用preg_match搜索UTF8编码的字符串。

preg_match('/H/u', "\xC2\xA1Hola!", $a_matches, PREG_OFFSET_CAPTURE);
echo $a_matches[0][1];

这应该打印1,因为“ H”在字符串“¡Hola!”中的索引1处。但是它显示为2。因此,即使我在正则表达式中传递了“ u”
修饰符,似乎也不会将主题视为UTF8编码的字符串。

我在php.ini中具有以下设置,并且其他UTF8功能正在运行:

mbstring.func_overload = 7
mbstring.language = Neutral
mbstring.internal_encoding = UTF-8
mbstring.http_input = pass
mbstring.http_output = pass
mbstring.encoding_translation = Off

有任何想法吗?


阅读 351

收藏
2020-05-26

共1个答案

一尘不染

“ u”开关仅对pcre有意义,PHP本身并未意识到。

从PHP的角度来看,字符串是字节序列,返回字节偏移似乎是合乎逻辑的(我不说“正确”)。

2020-05-26