php 截取中文字符串无乱码(ord()、substr()函数)

php中文网
发布: 2016-07-25 08:56:53
原创
1465人浏览过
本文介绍下,在php中截取中文字符串无乱码的二个函数,分别是ord()函数与substr()函数。有需要的朋友参考下。

在php编程中要注意:根据utf-8编码规范,将3个连续的字符计为单个字符。

来看一段截取中文字符串的代码,如下:

<?php
function cut_str($sourcestr,$cutlength)  
{  
   $returnstr='';  
   $i=0;  
   $n=0;  
   $str_length=strlen($sourcestr);//字符串的字节数  
   while (($n<$cutlength) and ($i<=$str_length))  
   {  
      $temp_str=substr($sourcestr,$i,1);  
      $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码  
      if ($ascnum>=224)    //如果ASCII位高与224,  
      {  
$returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符          
         $i=$i+3;            //实际Byte计为3  
         $n++;            //字串长度计1  
      }  
      elseif ($ascnum>=192) //如果ASCII位高与192,  
      {  
         $returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符  
         $i=$i+2;            //实际Byte计为2  
         $n++;            //字串长度计1  
      }  
      elseif ($ascnum>=65 && $ascnum<=90) //如果是大写字母,  
      {  
         $returnstr=$returnstr.substr($sourcestr,$i,1);  
         $i=$i+1;            //实际的Byte数仍计1个  
         $n++;            //但考虑整体美观,大写字母计成一个高位字符  
      }  
      else                //其他情况下,包括小写字母和半角标点符号,  
      {  
         $returnstr=$returnstr.substr($sourcestr,$i,1);  
         $i=$i+1;            //实际的Byte数计1个  
         $n=$n+0.5;        //小写字母和半角标点等与半个高位字符宽...  
      }  
   }  
         if ($str_length>$i){  
          $returnstr = $returnstr . "...";//超过长度时在尾处加上省略号  
      }  
    return $returnstr;  
}
登录后复制

以上代码实现对utf-8编码的字符串进行按字数剪切,其中如果要在剪切字母的时候也算成一个字的话就要把$n=$n+0.5;改成$n=$n+1;

怪兽AI数字人
怪兽AI数字人

数字人短视频创作,数字人直播,实时驱动数字人

怪兽AI数字人 44
查看详情 怪兽AI数字人

另外,要说明的是,php提供了自带的处理函数,使用 mb_substr($str,int,int,'utf-8');即可实现此功能。 其中的参数分别为目标字符串$str,开始截取位置int,截取长度int,截取后的字符编码(utf-8)。

返回结果: 从开始位置(开始位置的字符算在长度之内)的int个字符。

例如:

$str = '性的规定可广泛的覆盖大沙发扩大双方';
echo mb_substr($str,7,3,'utf-8');
登录后复制

输出结果: 的覆盖 三个字



PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号