PHP中文字符串截断无乱码解决方法
一个比较好用的字符串截取函数: 0xa0)
{
$tmpstr .= substr($str,2);
$i++;
} else {
$tmpstr .= substr($str,1);
}
}
if($length < 0) $tmpstr = strrev($tmpstr);
return $tmpstr;
}
使用方法示例: $len = strlen($str1);
echo ' '.$len; //return 28 $len = strlen($str2); echo ' 结果显示: 28 29 我是一串比较 我是一串比较 中文不带英文 中文带yingwen 这个函数十分有用,比如用来截断比较长的文件名,但是要在中间加上...,可以这样来做: $size) {
$part1 = substring($str,$size / 2);
$part2 = substring($str,$len - ($size/2),$len);
return $part1 . "..." . $part2;
} else {
return $str;
}
}
另外,网上看到一种超级简单的中文截断解决方案,试用了一下,效果也不错:
原理解释: chr(0)不是null
07null是什么都没有,而chr(0)的值是0。表示成16进制是0x00,表示成二进制是00000000
08虽然chr(0)不会显示出什么,但是他是一个字符。
09当汉字被截断时,根据编码规则他总是要把后边的其他字符拉过来一起作为汉字解释,这就是出现乱码的原因。而值为0x81到0xff与0x00组合始终都显示为“空”
10根据这一特点,在substr的结果后面补上一个chr(0),就可以防止出现乱码了 ----------------------------
20120705更新:
以上方法虽好,但是偶尔还是会碰到乱码,原因未深究。不过可以用以下的方法,对UTF8字符文本屡试不爽。
注意:该方法中将汉字计算为1单位长度,英文一个字母1单位长度,所以截断时需要注意长度设置。
计算长度的方法:
字符串截断函数: 使用方法和之前介绍的一样,比如formatName可以实现如下(这对汉字长度做了小优化): 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |