07/21
2016
php中最常用的截取文字的函数是substr(),但是在该函数中,中文占用2个或3个长度,所以可能把汉字截断,产生乱码。
有一个办法是使用mb_substr()来截取文字。这样确实可以,因为mb_substr()把所有文字都当做一个长度,所以截取中文时是整个字截取的,不会乱码。但mb_substr()的长度计算方法和substr()不同,有时候反而不能用它。经过一番苦搜,我找到了用php的ord()函数来截取文字的办法。
这种方法的字数计算方法和substr()一致,但不会导致汉字被截断.如果指定的长度会截断汉字,它会把因截断而产生的残缺汉字扔掉(以最后截取出来的长度有可能会比指定的长度少一两位。)。
另外它的参数也只有两个,一个是字符串,一个是截取长度。没错,它不能指定起始位置。
GBK版本:
function gb2312_substr($str, $limit) { $restr =''; for($i=0;$i< $limit-3;$i++) { $restr .= ord($str[$i])>127 ? $str[$i].$str[++$i] : $str[$i]; } return $restr; }
UTF-8版本:
function utf8_substr($str, $limit) { $restr = ''; for($i=0;$i< $limit-3;$i++) { $restr .= ord($str[$i])>127 ? $str[$i].$str[++$i].$str[++$i] : $str[$i]; } return $restr; }