首页 > 折腾WP > PHP UTF-8字符串截断函数

PHP UTF-8字符串截断函数

今天看到 奇遇 童鞋发表了一篇名叫《PHP截取UTF8字符串》的文章,里面阐述了平常我们使用的PHP截断函数截取UTF-8字符串时会出现乱码的情况。

于是我想到了现在正在使用的 PN2 主题貌似之前修改的时候有看到过那个截断函数,也仔细的看过,所以印象比较深刻,应该是没有考虑 奇遇 童鞋说的那种情况的。果不其然,经 奇遇 测试杯具的出现了乱码:

瞧!乱码了~

然后我坚决找到了主题中那个截断函数,对照了着修改,但由于水平有限,修改过程中,出现了各种乱码。无奈只能网上搜索,找到了 ZWW 童鞋写的《utf-8字符串截断函数》,如拨云见日,经过些许的修改,替换掉了原来的函数:

/**
* utf-8 字符串截取函数 edit by zwwooooo
* $sourcestr:要截取的字符串,默认空
* $i:开始截取地方,默认0
* $cutlength:截取长度(文字个数),默认100
* $endstr:截取后的字符串末尾字符串,默认是 “….”
*/
function imSubstr($sourcestr='',$cutlength=100,$i=0,$endstr='…'){
    $str_length=strlen($sourcestr);//字符串的字节数
    while (($n<$cutlength) and ($i<=$str_length))
    {
        $temp_str=substr($sourcestr,$i,1);
        $ascnum=Ord($temp_str);//ascii码
        if ($ascnum>=224)
        {
            $returnstr=$returnstr.substr($sourcestr,$i,3);
            $i=$i+3;
            $n++;
        }elseif ($ascnum>=192)
        {
            $returnstr=$returnstr.substr($sourcestr,$i,2);
            $i=$i+2;
            $n++;
        }else
        {
            $returnstr=$returnstr.substr($sourcestr,$i,1);
            $i=$i+1;
            $n=$n+0.5;
        }
    }
    if($i<$str_length)$returnstr.=$endstr;
    return $returnstr;
}

当然,如果修改的话,你大可保留你之前的函数名,根据原先的函数调整参数位置,这样就省去了修改主题各个地方调用函数名的麻烦。

现在貌似问题已经解决,有空的童鞋麻烦测试下~~

  1. luren@ 2011.04.17 / 22:26| #21

    @ISayMe
    这个我也不知道,应该要涉及到正则过滤吧~~不懂这个~~

  2. 恋月@ 2011.09.25 / 10:00| #22

    测试这个部分文字也有乱码
    悲剧乱码 出现几率比直接截取都高点

  3. luren@ 2011.09.25 / 12:32| #23

    @恋月
    暂时还没发现了有问题,不知道你是哪里看到的~~~

  4. 恋月@ 2011.09.25 / 12:33| #24

    @luren
    不是结尾 截取中部分字符很少数乱码

评论提交中, 请稍候...