php自定义函数实现统计中文字符串长度的方法小结


Posted in PHP onApril 15, 2017

本文实例讲述了php自定义函数实现统计中文字符串长度的方法。分享给大家供大家参考,具体如下:

中文字符计算为2个字符 英文字符计算为1个

代码

/**
* 可以统计中文字符串长度的函数
*
*/
function abslength($str)
{
  $len=strlen($str);
  $i=0;
  while($i<$len)
  {
    if(preg_match("/^[".chr(0xa1)."-".chr(0xff)."]+$/",$str[$i]))
    {
      $i+=2;
    }
    else
    {
      $i+=1;
    }
  }
  return $i;
}

另:php判断字符长度:中文,英文,数字。

这个方法很多。 记录一个简单的。

mb_strlen($str, 'GBK');

缺点是要安装mb库。

不过这个还是有部分问题待解决。

GB码编码规则是这样的:每个汉字由两个字节构成,第一个字节的范围从0XA1-0XFE,共96种。第二个字节的范围分别为0XA1-0XFE,共96种。利用这两个字节共可定义出 96 * 96=8836种汉字。实际共有6763个汉字。

BIG5码编码规则是这样的:每个汉字由两个字节构成,第一个字节的范围从0X81-0XFE,共126种。第二个字节的范围分别为0X40-0X7E,0XA1-0XFE,共157种。也就是说,利用这两个字节共可定义出 126 * 157=19782种汉字。这些汉字的一部分是我们常用到的,如一、丁,这些字我们称为常用字,其BIG5码的范围为0XA440-0XC671,共5401个。较不常用的字,如滥、调,我们称为次常用字,范围为 0XC940-0XF9FE,共7652个,剩下的便是一些特殊字符。

安全点的方法。

function StrLenW($str)
{
    $count = 0;
    $len = strlen($str);
     for($i=0; $i<$len; $i++,$count++)
       if(ord($str[$i])>=128)
        $i++;
     return $count;
}

最后,下面这个才是正确的,通用的!

代码:

/**作用:统计字符长度包括中文、英文、数字
* 参数:需要进行统计的字符串、编码格式目前系统统一使用UTF-8
* 修改记录:
   $str = "kds";
  echo sstrlen($str,'utf-8');
* */
function sstrlen($str,$charset) {
    $n = 0; $p = 0; $c = '';
    $len = strlen($str);
    if($charset == 'utf-8') {
      for($i = 0; $i < $len; $i++) {
        $c = ord($str{$i});
        if($c > 252) {
          $p = 5;
        } elseif($c > 248) {
          $p = 4;
        } elseif($c > 240) {
          $p = 3;
        } elseif($c > 224) {
          $p = 2;
        } elseif($c > 192) {
          $p = 1;
        } else {
          $p = 0;
        }
        $i+=$p;$n++;
      }
    } else {
      for($i = 0; $i < $len; $i++) {
        $c = ord($str{$i});
        if($c > 127) {
          $p = 1;
        } else {
          $p = 0;
      }
        $i+=$p;$n++;
      }
    }
    return $n;
}
PHP 相关文章推荐
PHP 数组基础知识小结
Aug 20 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
Oct 29 PHP
php旋转图片90度的方法
Nov 07 PHP
PHP添加Xdebug扩展的方法
Feb 12 PHP
php设计模式之简单工厂模式详解
Sep 04 PHP
PHP通过插入mysql数据来实现多机互锁实例
Nov 05 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
php获取文件名后缀常用方法小结
Feb 24 PHP
php单文件版在线代码编辑器
Mar 12 PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
微信公众平台开发教程②微信端分享功能图文详解
Apr 10 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
Apr 15 #PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
Apr 15 #PHP
PHP快速推送微信模板消息
Apr 14 #PHP
PHP 中常量的知识整理
Apr 14 #PHP
php动态读取数据清除最右边距的方法
Apr 12 #PHP
详解使用php调用微信接口上传永久素材
Apr 11 #PHP
php array_reverse 以相反的顺序返回数组实例代码
Apr 11 #PHP
You might like
php获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
2012/05/07 PHP
php计数排序算法的实现代码(附四个实例代码)
2020/03/31 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
Javascript常用运算符(Operators)-javascript基础教程
2007/12/14 Javascript
Jquery取得iframe下内容的方法
2013/11/18 Javascript
创建js对象和js类的方法汇总
2014/12/24 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
微信小程序switch组件使用详解
2018/01/31 Javascript
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
JavaScript如何实现防止重复的网络请求的示例
2021/01/28 Javascript
python基础教程之字典操作详解
2014/03/25 Python
python中Flask框架简单入门实例
2015/03/21 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
2020/11/01 Python
美国猫狗药物和用品网站:PetCareRx
2017/01/05 全球购物
送货司机岗位职责
2013/12/11 职场文书
先进班级集体事迹材料
2014/01/30 职场文书
运动会领导邀请函
2014/02/05 职场文书
空中乘务员岗位职责
2014/03/08 职场文书
老师对学生的评语
2014/04/18 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
2015年度员工自我评价范文
2015/03/11 职场文书
升学宴来宾致辞
2015/07/27 职场文书
诚信高考倡议书
2019/06/24 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers
为什么不建议在go项目中使用init()
2021/04/12 Golang
iSCSI服务器CHAP双向认证配置
2022/04/01 Servers