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 PDO中文乱码解决办法
Jul 20 PHP
判断是否为指定长度内字符串的php函数
Feb 16 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
Jun 27 PHP
基于php 随机数的深入理解
Jun 05 PHP
深入Apache与Nginx的优缺点比较详解
Jun 17 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
ThinkPHP使用心得分享-分页类Page的用法
May 15 PHP
php显示时间常用方法小结
Jun 05 PHP
php 数组处理函数extract详解及实例代码
Nov 23 PHP
Zend Framework入门教程之Zend_View组件用法示例
Dec 09 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 PHP
YII框架常用技巧总结
Apr 27 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树型类实例
2014/12/05 PHP
使用PHPExcel操作Excel用法实例分析
2015/03/26 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
JavaScript浏览器选项卡效果
2010/08/25 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
javascript通过className来获取元素的简单示例代码
2014/01/10 Javascript
JavaScript验证电子邮箱的函数
2014/08/22 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
使用bat打开多个cmd窗口执行gulp、node
2017/02/17 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
[11:27]《一刀刀一天》之DOTA全时刻20:TI4总奖金突破920W TS赛事分析
2014/06/18 DOTA
[01:09]DOTAPLUS——DOTA2的新时代
2018/04/04 DOTA
详解Python中的正则表达式的用法
2015/04/09 Python
Python判断直线和矩形是否相交的方法
2015/07/14 Python
python开发之list操作实例分析
2016/02/22 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
django的登录注册系统的示例代码
2018/05/14 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
python中使用while循环的实例
2019/08/05 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
Python新手学习标准库模块命名
2020/05/29 Python
python实现移动木板小游戏
2020/10/09 Python
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
消防安全宣传标语
2014/06/07 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技
Nginx速查手册及常见问题
2022/04/07 Servers