涉及到一个字符编码问题
gbk编码:一个汉字占两个字节
utf8编码:一个汉字占3个字节
案例:
<?php
$str="php";
echo strlen($str); //3,
echo "<br/>";
$str="传智播客";
echo "得到的是字节数:".strlen($str); //12
$str="传智播客PHP学院";
echo "<br/>";
echo strlen($str); //21
echo "<br/>";
echo mb_strlen($str,"gbk"); //12 一个汉字是
echo "<br/>";
echo mb_strlen($str,"utf8"); //9
?>
面试题目:
关于汉字字符串的截取:
案例:
<?php
header("Content-Type:text/html;charset=utf8");
$str="我的目标是成为PHP高级系统架构师";
echo mb_substr($str,6,7,"gbk"); //3个字节当成两个汉字 :是成为PHP
echo "<br/>";
echo mb_substr($str,6,7,"utf8"); // 为PHP高级系
function sub_utf8($str ,$start,$length=null){
##分割成单个字符串的数组
$arr=preg_split("//u",$str,-1,PREG_SPLIT_NO_EMPTY);
//去除其中的一段
$sub_arr=array_slice($arr,$start,$length);
return implode("",$sub_arr); ## join("",$sub_arr);
}
echo "<br/>";
echo mb_substr($str,6,2,"utf8"); //为P
echo mb_substr($str,6,2,"gbk"); //是�
echo "<br/>";
$rs=sub_utf8($str,6,7);
echo "<pre>";
print_r($rs);
echo "</pre>";
?>
案例2:
<?php
//如何求解字符串:中国2北333京的字符串,找到其中的北
header("Content-Type:text/html;charset=utf8");
$str="中国2北333京";
echo mb_strlen($str,"utf8"); //8
echo "<br/>";
echo strlen($str); //16
echo "<br/>";
echo mb_substr($str,3,1,'utf8');
//方法二,使用自定义的函数
function sub_utf8($str,$start=null,$length=null){
return implode("",array_slice(preg_split("//u",$str,-1,PREG_SPLIT_NO_EMPTY),$start,$length));
}
$arr=sub_utf8($str,3,1);
echo "<pre>";
print_r($arr);
echo "</pre>";
注意,上个案例中,用自定义的函数计算字符串长度的函数
可以直接
return count(preg_split("//u",$str,-1,PREG_SPLIT_NO_EMPTY));
希望对编码有疑问的同学,能够解答你们的疑惑!