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
Nov 25 PHP
关于Intype一些小问题的解决办法
Mar 28 PHP
PHP正确配置mysql(apache环境)
Aug 28 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
php网页标题中文乱码的有效解决方法
Mar 05 PHP
PHP的pcntl多进程用法实例
Mar 19 PHP
利用PHP如何实现Socket服务器
Sep 23 PHP
十个PHP高级应用技巧果断收藏
Sep 25 PHP
PHP常见的6个错误提示及解决方法
Jul 07 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
Jul 26 PHP
php根据地址获取百度地图经纬度的实例方法
Sep 03 PHP
php实现图片压缩处理
Sep 09 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编程最快明白》第八讲:php启发和小结
2010/11/01 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
ThinkPHP权限认证Auth实例详解
2014/07/22 PHP
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
PHP7数组的底层实现示例
2019/08/25 PHP
用js查找法实现当前栏目的高亮显示的代码
2007/11/24 Javascript
CSS和Javascript简单复习资料
2010/06/29 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
利用js来实现缩略语列表、文献来源链接和快捷键列表
2016/12/16 Javascript
nodejs aes 加解密实例
2018/10/10 NodeJs
jQuery 同时获取多个标签的指定内容并储存为数组
2018/11/20 jQuery
详解Vue 匿名、具名和作用域插槽的使用方法
2019/04/22 Javascript
利用python获得时间的实例说明
2013/03/25 Python
Python中的sort()方法使用基础教程
2017/01/08 Python
tensorflow 获取模型所有参数总和数量的方法
2018/06/14 Python
从运行效率与开发效率比较Python和C++
2018/12/14 Python
33个Python爬虫项目实战(推荐)
2019/07/08 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
python numpy实现rolling滚动案例
2020/06/08 Python
Python request中文乱码问题解决方案
2020/09/17 Python
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
法律专业个人实习自我鉴定
2013/09/23 职场文书
护士的自我鉴定
2014/02/07 职场文书
厨房管理计划书
2014/04/27 职场文书
环保建议书100字
2014/05/14 职场文书
王金山在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
初中历史教学反思
2016/02/19 职场文书
关于python中readlines函数的参数hint的相关知识总结
2021/06/24 Python
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL
Java基础——Map集合
2022/04/01 Java/Android
Android自定义双向滑动控件
2022/04/19 Java/Android