PHP中substr截取中文乱码解决方案

编程知识 更新时间:2023-04-04 08:52:03
方法一:
<?php
header("Content-Type: text/html; charset=utf-8");
$str="107sadf网站工作室欢迎您!";
echo strlen($str)."<br>";
echo substr($str,0,12)."<br>";
echo mb_strlen($str,"UTF8")."<br>";
echo mb_substr($str,0,12,"UTF8")."<br>";
?>

显示结果如下
34
107sadf网�
16
107sadf网站工作室
 
 
strlen()函数返回字符串所占的字节长度,一个英文字母、数字、各种符号均占一个字节,它们的长度均为1。一个中文字符占两个字节,所以一个中文字符的长度是2,对于一个UTF-8的中文字符,会把它当做长度为3来处理。

怎么准确的计算字符串的长度呢?这里,得引入另外一个函数mb_strlen()。mb_strlen()函数的用法与strlen()几乎一摸一样,只是多了一个指定字符集编码的参数。函数原型为:

  
  1. int mb_strlen(string string_input, string encode); 
在mb_strlen计算时,选定内码为UTF8,则会将一个中文字符当作长度1来计算。
mb_substr也同样的原理
注:mb_strlen与mb_substr并不是PHP的核心函数,使用前需要打开php.ini中的extension=php_mbstring.dll这一项

方法二:
 
 

<?php
header("Content-Type: text/html; charset=utf-8");
$str="107sadf网站工作室欢迎您!";
function chinesesubstr($str,$start,$len){
        $strlen = $len - $start;    //定义需要截取字符的长度
        for($i=0;$i<$strlen;$i++){                   //使用循环语句,单字截取,并用$tmpstr.=$substr(?,?,?)加起来
            if(ord(substr($str,$i,1))>0xa0){     //ord()函数取得substr()的第一个字符的ASCII码,如果大于0xa0的话则是中文字符
                $tmpstr.=substr($str,$i,3);        //设置tmpstr递加,substr($str,$i,3)3是指三个字符当一个字符截取(因为utf8编码的三个字符算一个汉字)
                $i+=2;
            }else{                                             //其他情况(英文)按单字符截取
                $tmpstr.=substr($str,$i,1);
            }

        }
        return $tmpstr;
}
echo chinesesubstr($str,0,12)."<br>";
?>

最后结果显示为:

 
107sadf网站



更多推荐

PHP中substr截取中文乱码解决方案

本文发布于:2023-04-04 08:52:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/bd0b0df4120176290cbd15202eb6c32c.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:乱码   中文   解决方案   PHP   substr

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 41791文章数
  • 14阅读数
  • 0评论数