代码说明问题,
function msubstr($str, $start, $len) {
$tmpstr = "";
$strlen = $start + $len;
for($i = 0; $i < $strlen; $i++) {
if(ord(substr($str, $i, 1)) > 0xa0) {
$tmpstr .= substr($str, $i, 2);
$i++;
} else
$tmpstr .= substr($str, $i, 1);
}
return $tmpstr;
}
关键在于 ord(substr($str, $i, 1)) > 0xa0 中文的编码占两个字节,如果第一个字节>0xa0说明是中文。
其他截断utf-8什么的,一个道理! 关键看怎么编码,编码的首字节是哪个范围