为了账号安全,请及时绑定邮箱和手机立即绑定

PHP中的preg_match和UTF-8

PHP中的preg_match和UTF-8

PHP
素胚勾勒不出你 2019-07-27 14:16:38
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]));


查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 645 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信