加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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,大约一半的角色都会失败.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读