关于PHP函数substr和strlen对中文字符串截取乱码和中文长度错误问题

    我们都知道,在PHP里对字符串的操作和数组的操作是最多的,生活中最常用到的字符串函数有strlen(),substr(),strpos(),strstr(),str_replace(),

但是在使用过程中我们可能会发现一些问题,上面提到的函数对中文字符串是不友好的,

    举例,现在有一字符串 ‘华而不实,为所欲为’,这样一个字符串,我们想取到前四个字‘华而不实’,这个时候会用到php函数 substr()

<?php
    $str="华而不实,为所欲为";
    echo substr($str,0,4);//第一个参数为要截取的字符串,第二个为起始点,第三个参数为要截取的长度

    我们来运行一下,看到网页的执行效果

    runresult1.jpg

    乱码,好像是忘记了加header 定义字符编码,现在我们加上header试一下

header("content-type:text/html;charset=utf-8");

    得到的结果是:

runresult2.jpg

    看到第一个字,华 已经出来了,但是后面是乱码,为什么会有这样的问题呢,

        因为编码的不同,substr在识别中文的时候,utf-8格式的中文字符每个中文会占用三个字节,也就是取

    四位的时候,只能取出第一个字的所有,和第二个字的第一个字节,所以会出现乱码的问题,那有没有

    什么解决办法呢,是有的,为了解决这个问题,有一个mbstring 扩展,是为了中文字符串使用的,

    函数只需要在之前的substr前加上mb_ 即可 为 mb_substr();

echo mb_substr($str,0,4,'utf-8');//前三个参数之前介绍过,第四个参数为当前中文的编码类型

    我们都知道,中文也分不同的编码,utf-8  ,gb2312 ,gbk 这些,所以在使用mb_系列的函数时候,不要忘记加上编码哦

看一下效果

runresult3.jpg

这一次就能正常显示要截取的字符串了,

同时 大部分的字符串函数需要涉及到中文的,mbstring扩展都有对应的函数,只需要在原函数前加上mb_就可以了,

然后参数最后加上字符编码,是不是很简单呢。

标签:
作者:admin_rose
我只相信自己,终有一天会完成自己梦想中的事情
版权所有原创文章,转载请保留或注明出处:http://www.antvv.com/?id=5

相关文章

已有 0 位网友参与,快来吐槽:

发表评论