php 中文字符串截取乱码
PHP截取字符串如果是英文直接用substr就可以了,但对于中文字符,用substring可能会导致乱码,那么将如何解决呢?
1、通过函数mb_substr实现
说明:mb_substr($str, $start, $length, $encoding);通过该函数即可,但需要加载php_mbstring.dll扩展。
案例:
<?php$str='这是一个字符串切割函数';echo"mb_substr:".mb_substr($str,0,7,'utf-8');?>
2、通过函数mb_strcut实现
说明:mb_strcut() 和 mb_substr() 类似,都是从一个字符串中提取子字符串,但是按字节数来执行,而不是字符个数。 如果截断位置位于多字节字符两个字节的中间,将于该字符的第一个字节开始执行。 这也是和 substr() 函数的不同之处,后者简单地将字符串在字节之间截断,这将导致一个畸形的字节序列。
3、通过编写的函数(支持UTF-8和GB2312)
案例:
<?php/*Utf-8、gb2312都支持的汉字截取函数cut_str(字符串,截取长度,开始长度,编码);编码默认为utf-8开始长度默认为0*/functioncut_str($string,$sublen,$start=0,$code='UTF-8'){$string=str_replace(array('&','"','<','>'),array('&','"','<','>'),$string);if($code=='UTF-8'){$pa="/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";preg_match_all($pa,$string,$t_string);if(count($t_string[0])-$start>$sublen)returnjoin('',array_slice($t_string[0],$start,$sublen))."...";returnjoin('',array_slice($t_string[0],$start,$sublen));}else{$start=$start*2;$sublen=$sublen*2;$strlen=strlen($string);$tmpstr='';for($i=0;$i<$strlen;$i++){if($i>=$start&&$i<($start+$sublen)){if(ord(substr($string,$i,1))>0xa0){$tmpstr.=substr($string,$i,2);}else{$tmpstr.=substr($string,$i,1);}}if(ord(substr($string,$i,1))>0xa0)$i++;}if(strlen($tmpstr)<$strlen)$tmpstr.="...";return$tmpstr;}}$str="这是一个字符串切割函数";echocut_str($str,8,0,'gb2312');?>
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。