涉及到一个字符编码问题php
gbk编码:一个汉字占两个字节html
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:code
<?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>";
注意,上个案例中,用自定义的函数计算字符串长度的函数htm
能够直接字符串
return count(preg_split("//u",$str,-1,PREG_SPLIT_NO_EMPTY));
但愿对编码有疑问的同窗,可以解答大家的疑惑!