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

 我来答
匿名用户
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]
中英混合也完全没有问题。
6星雨9
2013-10-30
知道答主
回答量:26
采纳率:0%
帮助的人:9.5万
展开全部
//*************************************************************************
/*截取中英文混合字符串*/
//*************************************************************************
//二个英文字符对应一个中文字符,$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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
汲笑卉0fl6fa
2013-10-30 · 超过29用户采纳过TA的回答
知道答主
回答量:47
采纳率:0%
帮助的人:75.6万
展开全部
<?php
$string ="大苏打很深刻的骄傲了";
$new_str = mb_substr($string,2,4,"UTF-8");
//mb_substr.截取字符串php内置函数,参数分别为:需要截取的字符串,从第几个字符开始截取,截取几个字符,字符编码转换(utf-8/gbk/big5)等编码进行转换
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiaoxinxin嗄嗄
2013-10-31
知道答主
回答量:8
采纳率:0%
帮助的人:1.1万
展开全部
$v=iconv('gb2312','utf-8',$str);
//或者将gb2312与utf-8反过来
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式