跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

php中文字符串截取 php截取中文字符串的代码

php截取中文字符串,一般就是根据值是否大于等于128来判断是否是双字节字符,以避免出现截取不全与乱码的情况。

不过,遇到中英文混合、特殊符号也包括其中的情况时,问题就不那么容易解决了。

以下是一个全面解决中文字符串截取问题的函数,有需要的朋友可以参考下。

说明:

1、len 参数以中文字符为标准,1len等于2个英文字符,为了形式上好看些2、如果将magic参数设为false,则中文和英文同等看待,取绝对的字符数3、特别适用于用htmlspecialchars()进行过编码的字符串

4、能正确处理gb2312中实体字符模式(??)

例子:

0){$cnum = 0;for($i=0;$i<$start;$i++){if(ord(substr($title,$i,1)) >= 128) $cnum ++;}if($cnum%2 != 0) $start--;unset($cnum);}if(strlen($title)<=$len) return substr($title,$start,$len);$alen = 0;$blen = 0;$realnum = 0;for($i=$start;$i"){$cstep = 4;$length += 4;$i += 3;$realnum ++;if($magic){$alen ++;}}else if(substr($title,$i,5) == "&"){$cstep = 5;$length += 5;$i += 4;$realnum ++;if($magic){$alen ++;}}else if(substr($title,$i,6) == """){$cstep = 6;$length += 6;$i += 5;$realnum ++;if($magic){$alen ++;}}else if(substr($title,$i,6) == "'"){$cstep = 6;$length += 6;$i += 5;$realnum ++;if($magic){$alen ++;}}else if(preg_match("/(\d+);/i",substr($title,$i,8),$match)){$cstep = strlen($match[0]);$length += strlen($match[0]);$i += strlen($match[0])-1;$realnum ++;if($magic){$blen ++;$ctype = 1;}}}else{if(ord($cur)>=128){$cstep = 2;$length += 2;$i += 1;$realnum ++;if($magic){$blen ++;$ctype = 1;}}else{$cstep = 1;$length +=1;$realnum ++;if($magic){$alen++;}}}if($magic){if(($blen*2+$alen) == ($len*2)) break;if(($blen*2+$alen) == ($len*2+1)){if($ctype == 1){$length -= $cstep;break;}else{break;}}}else{if($realnum == $len) break;}}unset($cur);unset($alen);unset($blen);unset($realnum);unset($ctype);unset($cstep);return substr($title,$start,$length);}?>

相关文章