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