一起源码网

  • www.171739.xyz
  • 全球最大的互联网技术和资源下载平台
搜索
猜你喜欢
查看: 8852|回复: 1
打印 上一主题 下一主题

substr截取出现中文乱码怎么办

[复制链接]

0

主题

0

帖子

1万

积分

钻石会员

Rank: 8Rank: 8

积分
17424
QQ
跳转到指定楼层
楼主
发表于 2020-4-25 16:30 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
方法一:
<?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()几乎一摸一样,只是多了一个指定字符集编码的参数。函数原型为:
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网站

分享到:  QQ好友和群QQ好友和群
收藏收藏
回复

使用道具 举报

0

主题

18

帖子

60

积分

注册会员

Rank: 2

积分
60
沙发
发表于 2022-9-29 13:41 | 只看该作者
安卓源代码是免费的吗
回复

使用道具 举报

一起源码让程序更轻更快

www.171739.xyz

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表