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));

但愿对编码有疑问的同窗,可以解答大家的疑惑!

相关文章
相关标签/搜索