php – 多字节字符串和环视奇怪的bug
发布时间:2020-12-13 16:20:50 所属栏目:PHP教程 来源:网络整理
导读:为什么以下代码对于不同的多字节字符串表现不同? echo preg_replace('@(?=pL)@u','*','?'); // prints: '*?' ? echo preg_replace('@(?=pL)@u','?'); // prints: '*?' ? echo preg_replace('@(?=pL)@u','?'); // prints: '*?*?' ? echo preg_replace('@(
为什么以下代码对于不同的多字节字符串表现不同?
echo preg_replace('@(?=pL)@u','*','?'); // prints: '*?' ? echo preg_replace('@(?=pL)@u','?'); // prints: '*?' ? echo preg_replace('@(?=pL)@u','?'); // prints: '*?*?' ? echo preg_replace('@(?=pL)@u','?'); // prints: '*?*?' ? 见:http://3v4l.org/fvab1 解决方法
您还需要包含修饰符(Lm).请参阅以下脚本迭代整个阿拉伯语unicode块:
<?php function uchar_2($dec) { $utf = chr(192 + (($dec - ($dec % 64)) / 64)); $utf .= chr(128 + ($dec % 64)); return $utf; } $issues = 0; $count = 0; for ($dec = 1536; $dec <= 1791; $dec++) { $char = uchar_2($dec); if (preg_replace('@^(?=pLm)$@u',$char) !== $char) { printf("Issue with %s (%s)n",$dec,$char); $issues++; } $count++; } printf("Found %d issues in %d rowsn",$issues,$count); 如果没有Lm,大约一半的角色都会失败. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |