将 strpos 与 UTF-8 字符串一起使用是否安全?

2023-12-19

我有一堆具有不同字符集的字符串。这$charset变量包含当前字符串的字符集。

$content = iconv($charset, 'UTF-8', $content);

完成后,使用是否安全strpos, strlen, substr等等而不是它们的多字节等效项?我问这个是因为我使用preg_match也有很多。所以如果我使用PREG_OFFSET_CAPTURE要获取字符串中单词的位置,我不能使用该值mb_substr删除该单词之前的所有内容。


这完全取决于你想做什么。核心strlen和类似的功能适用于bytes。它们接受和返回的每个数字都是字节计数或字节偏移量。 mb_* 函数可识别编码人物。它们接受和返回的所有数字都是字符计数或偏移量。

如果您有一种安全的方法来获取字符串中的字节偏移量(“安全”意味着偏移量不在多字节字符的中间),然后,例如,使用以下命令裁剪该偏移量之前的所有内容substr,这样就可以了。例如:

$str     = '漢字';
$offset  = strpos($str, '字');
$cropped = substr($str, $offset);

工作正常。

但是,这行不通:

$cropped = substr($str, $offset, 1);

你无法安全地剪掉一个byte无需冒切入多字节字符的风险。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 strpos 与 UTF-8 字符串一起使用是否安全? 的相关文章

随机推荐