涉及到一個字符編碼問題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));
但願對編碼有疑問的同窗,可以解答大家的疑惑!