一个UTF-8中文字符由3个ASCII字符组成,而PHP中对字符的处理是基于ASCII字符的,也就是说,如果在PHP中截取字符串就有可能出现乱码
如果可以加载php的mbstring扩展模块,那么可以用mb_substr()函数解决这个问题,可惜有很多空间并没加载,那么怎么办呢?
那么也只能从UTF-8的特性入手,自己写一个函数了
中文的utf8编码是有规律的,一个中文字符的utf8编码, 总是以224-239之间的ASCII码开头的
那么只要判断截取的字符串后2位的ASCII在不在224-239之间就行了,如果后2位的值都不在,那么就没乱码的问题了,如果其中一个值在这之间,那么把它和它后面的舍弃就行了
function csubstr($string,$index,$length){
if(strlen($string)<=$length){return substr($string,$index);}
$char=ord($string[$index+$length-1]);
if($char>=224&&$char<=239){$length=$length-1;}
else{
$char=ord($string[$index+$length-2]);
if($char>=224&&$char<=239){$length=$length-2;}
}
return substr($string,$index,$length).'……';
}