解决PHP substr 截取汉字乱码问题


php用substr截取中文时经常会出现乱码,因为utf-8下汉字是3字节的,如果截取长度正好是3的倍数应该不会出现乱码,可是如果你要截取的字符串中有空格,或者其他字符(比如 “ ”),也会出现乱码。

当然,php会给出官方的解决办法。mb_substr 和 mb_substr,需要在php.ini中打开php_mbstring.dll.

mb_substr用法

<?php
    echo mb_substr("这里没有乱码!",0,3,"utf-8"); //视为字符流
?>

结果:

这里没

mb_strcut用法

<?php
    echo mb_strcut("这里没有乱码!",0,3,"utf-8");//视为字节流,utf-8下一个汉字三个字节
?>

结果:

但是有时程序员无法更改服务器配置(需要在php.ini中打开php_mbstring.dll),这是蛋疼的问题。所以我写了个函数,希望能帮到大家。

function cubstr($string, $beginIndex, $length){
    if(strlen($string) < $length){
        return substr($string, $beginIndex);
    }

    $char = ord($string[$beginIndex + $length - 1]);
    if($char >= 224 && $char <= 239){
        $str = substr($string, $beginIndex, $length - 1);
        return $str;
    }

    $char = ord($string[$beginIndex + $length - 2]);
    if($char >= 224 && $char <= 239){
        $str = substr($string, $beginIndex, $length - 2);
        return $str;
    }

    return substr($string, $beginIndex, $length);
}

大宝日记版权所有,转载请联系 jacksunquan@gmail.com.恶意转载,后果自负。
原文地址:http://www.sundabao.com/解决php-substr-截取字符串乱码问题/ 

JackSun

JackSun

I'm a coder.

You may also like...

1 Response

  1. 无业游民GG says:

    不错,学习了

  2. 李春儿 says:

    看过,的确不错。谢谢博主

  3. 李春儿 says:

    不知该说些什么。。。。。。就是谢谢

Leave a Reply

Your email address will not be published.