首页 >后端开发 >php教程 >为什么 PREG_OFFSET_CAPTURE 使用 UTF8 和'u”修饰符返回字节计数而不是字符计数?

为什么 PREG_OFFSET_CAPTURE 使用 UTF8 和'u”修饰符返回字节计数而不是字符计数?

Linda Hamilton
Linda Hamilton原创
2024-12-03 20:24:19300浏览

Why Does PREG_OFFSET_CAPTURE Return Byte Counts Instead of Character Counts with UTF8 and the 'u' Modifier?

尽管使用 UTF8 表达式,PREG_OFFSET_CAPTURE 仍对字节进行计数

使用带有 u 修饰符的 preg_match 进行 UTF8 处理时,可能会遇到意外行为,其中 PREG_OFFSET_CAPTURE 返回字节计数而不是字符计数.

preg_match('/H/u', "\xC2\xA1Hola!", $a_matches, PREG_OFFSET_CAPTURE);
echo $a_matches[0][1]; // Prints 2, but should be 1 for "H" in "¡Hola!"

尽管如此u 修饰符将模式和主题标记为 UTF8 编码,偏移量仍以字节为单位。要获取基于字符的偏移量,您可以使用 mb_strlen:

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

以上是为什么 PREG_OFFSET_CAPTURE 使用 UTF8 和'u”修饰符返回字节计数而不是字符计数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn