我正在尝试使用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
有任何想法吗?
“ u”开关仅对pcre有意义,PHP本身并未意识到。
从PHP的角度来看,字符串是字节序列,返回字节偏移似乎是合乎逻辑的(我不说“正确”)。