php朝花夕拾之strlen mb_strlen的函數的區別

涉及到一個字符編碼問題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));

但願對編碼有疑問的同窗,可以解答大家的疑惑!

相關文章
相關標籤/搜索