请问下php怎么处理截取字符串出现的乱码问题

如题所述

利用php内置方法mb_substr截取不乱码;
1、GBK编码截取示例:
$str = '我是谁'; //gbk编码的字符串
echo mb_substr($str, 0, 1, 'gbk'); //输出 我

mb_substr方法比substr多一个参数,用来指定字符串编码。

2、utf-8编码截取示例:
[code]
$str = '我abc是谁'; //utf-8编码的字符串
echo mb_substr($str, 0, 2, 'utf-8'); //输出 我a
[/code]
中英混合也完全没有问题。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-30
//*************************************************************************
/*截取中英文混合字符串*/
//*************************************************************************
//二个英文字符对应一个中文字符,$len针对中文数字个数
//flag=0 为无省略点 {$str|ccStrLeft=###,8}|{$str|ccStrLeft=###,8,0}
//flag=1 为有省略点 {$str|ccStrLeft=###,8,1}
function ccStrLeft($str,$len,$flag=0){
$str=strip_tags($str); //去掉html.php标签 \\"right\\"\""=""
$from=0;
$str1=preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'. 
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s', 
'$1',$str); 
//判断有几个字母
$str2=str_split($str1);
$count=0;
$len1=0;
foreach($str2 as $k=>$v){
if((ord($v) & 0x80)==0){  //英文结果为0,中文结果为128
$count++;
$len1=ceil($count/2);
}
}
$len=$len+($len1-1);
$str=preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'. 
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s', 
'$1',$str);
if($flag==1){$str=$str.'...';}
return $str;
}

第2个回答  2013-10-30
<?php
$string ="大苏打很深刻的骄傲了";
$new_str = mb_substr($string,2,4,"UTF-8");
//mb_substr.截取字符串php内置函数,参数分别为:需要截取的字符串,从第几个字符开始截取,截取几个字符,字符编码转换(utf-8/gbk/big5)等编码进行转换

本回答被提问者采纳
第3个回答  2013-10-31
$v=iconv('gb2312','utf-8',$str);
//或者将gb2312与utf-8反过来

相似回答