当前位置: 首页 > PHP > 正文

首先得空间支持mb_substr函数.


<?php
$str = '测试utf-8中文会不会乱码';

echo "mb_substr:" . mb_substr($str, 0, 8, 'utf-8');
//结果:测试utf-8中
echo "<br>";

echo "mb_strcut:" . mb_strcut($str, 0, 8, 'utf-8');
//结果:测试ut
?>

从上面的例子可以看出,mb_substr是按字来截取字符,而mb_strcut是按字节来截取字符,但都不会产生乱码。

另网上有以下函数可以解决这个问题,当空间不支持上面函数时,可以用这种方法.

此方法自己未测试.

// 支持截取中文
/**
* UTF-8编码字符串的截取
*
* @param string $str
* @param int $len
* @param string $dot
* @return string
*/
function SubTitle($String,$Length) {
    if (mb_strwidth($String, 'UTF8') <= $Length ){
    return $String;
}else{
    $I = 0;
    $len_word = 0;
    while ($len_word < $Length){
        $StringTMP = substr($String,$I,1);
        if ( ord($StringTMP) >=224 ){
            $StringTMP = substr($String,$I,3);
            $I = $I + 3;
            $len_word = $len_word + 2;
         }elseif( ord($StringTMP) >=192 ){
            $StringTMP = substr($String,$I,2);
            $I = $I + 2;
            $len_word = $len_word + 2;
        }else{
            $I = $I + 1;
            $len_word = $len_word + 1;
        }
        $StringLast[] = $StringTMP;
    }
/* raywang edit it for dirk for (es/index.php)*/
    if (is_array($StringLast) && !emptyempty($StringLast)){
        $StringLast = implode("",$StringLast);
        $StringLast .= "...";
    }
    return $StringLast;
}
}

PHP中utf-8中文的截取出现乱码解决:等您坐沙发呢!

发表评论

gravatar

快捷键:Ctrl+Enter