[php]如何在PHP中截取中文字串无乱码
发布网友
发布时间:2022-04-26 21:19
我来回答
共4个回答
懂视网
时间:2022-04-19 08:49
GBK编码截取示例
$str = '我是谁'; //gbk编码的字符串
echo mb_substr($str, 0, 1, 'gbk'); //输出 我
mb_substr方法比substr多一个参数,用来指定字符串编码。
utf-8编码截取示例
$str = '我abc是谁'; //utf-8编码的字符串
echo mb_substr($str, 0, 2, 'utf-8'); //输出 我a
中英混合也完全没有问题。
注意:
1、使用的时候要注意php文件的编码,和网页显示时的编码。
2、使用这个mb_substr方法要事先知道字符串的编码,如果不知道编码,就需要判断,mbstring库还提供了mb_check_encoding
来检验字符串编码。
推荐教程:PHP视频教程
热心网友
时间:2022-04-19 05:57
一年前写的一个函数。用法与substr一样,支持中文。您也可以加以改进。
//截取字符串含数,对系统函数的改进,不会将中文变乱。
function mysubstr ($str,$start,$len=0,$cutchar="…") {
$str=str_replace(" ",' ',$str);
$str=str_replace("“",'“',$str);
$str=str_replace("”",'”',$str);
$str=str_replace("—",'—',$str);
$str=str_replace(""",'"',$str);
$str=str_replace(''',"'",$str);
$str=str_replace("<",'<',$str);
$str=str_replace(">",'>',$str);
$str=str_replace("&",'&',$str);
$str=preg_replace("/[\s]+/"," ",$str);
$tolen=strlen($str);
if(!($start==0 && $len>=$tolen)){
//为方便操作,先将起始值和长度值转换为正数
if($start<0)$start=$tolen+$start;if($start<0)$start=0;if($start>$tolen)return "";
if($len<=0)$len=($tolen+$len)-$start;if($len<1)return "";
if($len>$tolen)$len=$tolen;
for($i=0;$i<$start;$i++){
if(ord(substr($str,$i,1))>127){$i++;}
}
$start=$i; //起始位置计算完成
for($k=0;$k<$len;$k++,$i++){
if(ord(substr($str,$i,1))>127){$i++;$k++;}
}
$len=$k; //长度计算完成
$str=substr($str,$start,$len);
if($start>0){$str=$cutchar.$str;}
if($start+$len<$tolen){$str.=$cutchar;}
}
$str=str_replace("&",'&',$str);
$str=str_replace('"','"',$str);
$str=str_replace("'",''',$str);
$str=str_replace("<",'<',$str);
$str=str_replace(">",'>',$str);
return $str;
}
热心网友
时间:2022-04-19 07:15
只要截取的个数是双数就行了 中文是2个字节等于一个汉字长
热心网友
时间:2022-04-19 08:50
按照编码截取
$str = "心";
echo mb_substr($str,0,3,"UTF-8");追问$str,0,3,"UTF-8"); 这里面是什么意思,分别是