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 相关文章推荐
从C/C++迁移到PHP——判断字符类型的函数
Oct 09 PHP
PHP 文件上传源码分析(RFC1867)
Oct 30 PHP
php下网站防IP攻击代码,超级实用
Oct 24 PHP
php页面缓存ob系列函数介绍
Oct 18 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
php遍历文件夹下的所有文件和子文件夹示例
Mar 20 PHP
thinkphp实现like模糊查询实例
Oct 29 PHP
PHP生成条形码大揭秘
Sep 24 PHP
学习php设计模式 php实现模板方法模式
Dec 08 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
Dec 31 PHP
php导出csv文件,可导出前导0实例代码
Nov 16 PHP
thinkPHP5实现数据库添加内容的方法
Oct 25 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 模拟POST|GET操作实现代码
2010/07/20 PHP
php自动加载机制的深入分析
2013/06/08 PHP
php防止sql注入代码实例
2013/12/18 PHP
php中session使用示例
2014/03/29 PHP
ThinkPHP模板输出display用法分析
2014/11/26 PHP
smarty中改进truncate使其支持中文的方法
2016/05/30 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
Yii框架视图、视图布局、视图数据块操作示例
2019/10/14 PHP
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
2013/11/19 Javascript
jquery设置css样式的多种方法(总结)
2017/02/21 Javascript
在vue-cli项目中使用bootstrap的方法示例
2018/04/21 Javascript
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
Python实现周期性抓取网页内容的方法
2015/11/04 Python
python实现微信远程控制电脑
2018/02/22 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
2020/11/18 Python
Django 用户认证Auth组件的使用
2020/11/30 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
男方父母证婚词
2014/01/12 职场文书
中药专业毕业自荐书范文
2014/02/08 职场文书
书香校园建设方案
2014/05/02 职场文书
中职生求职信
2014/07/01 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
博士给导师的自荐信
2015/03/06 职场文书
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python