请问下php怎么处理截取字符串出现的乱码问题
4个回答
2015-07-08
展开全部
利用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、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]
中英混合也完全没有问题。
展开全部
//*************************************************************************
/*截取中英文混合字符串*/
//*************************************************************************
//二个英文字符对应一个中文字符,$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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<?php
$string ="大苏打很深刻的骄傲了";
$new_str = mb_substr($string,2,4,"UTF-8");
//mb_substr.截取字符串php内置函数,参数分别为:需要截取的字符串,从第几个字符开始截取,截取几个字符,字符编码转换(utf-8/gbk/big5)等编码进行转换
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
$v=iconv('gb2312','utf-8',$str);
//或者将gb2312与utf-8反过来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询