PHP中的preg_match和UTF-8我正在尝试使用preg_match搜索UTF8编码的字符串。preg_match('/H/u', "\xC2\xA1Hola!", $a_matches, PREG_OFFSET_CAPTURE);echo $a_matches[0][1];这应该打印1,因为“H”在字符串“¡Hola!”中的索引1处。但它打印2.所以它似乎并没有将主题视为UTF8编码的字符串,即使我在正则表达式中传递“u” 修饰符。我在php.ini中有以下设置,其他UTF8函数正在运行:mbstring.func_overload = 7mbstring.language = Neutralmbstring.internal_encoding = UTF-8mbstring.http_input = passmbstring.http_output = passmbstring.encoding_translation = Off有任何想法吗?
3 回答
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
尽管u修饰符使得模式和主题都被解释为UTF-8,但捕获的偏移量仍以字节为单位计算。
您可以使用mb_strlen
以UTF-8字符而不是字节来获取长度:
$str = "\xC2\xA1Hola!";preg_match('/H/u', $str, $a_matches, PREG_OFFSET_CAPTURE);echo mb_strlen(substr($str, 0, $a_matches[0][1]));
- 3 回答
- 0 关注
- 645 浏览
添加回答
举报
0/150
提交
取消