首先得空间支持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中文的截取出现乱码解决:等您坐沙发呢!