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写的小东西
Dec 06 PHP
PHP用mysql数据库存储session的代码
Mar 05 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
Dec 25 PHP
让PHP更快的提供文件下载的代码
Jun 13 PHP
PHP对MongoDB[NoSQL]数据库的操作
Mar 01 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
Jun 21 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 PHP
解析linux下安装memcacheq(mcq)全过程笔记
Jun 27 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
PHP使用http_build_query()构造URL字符串的方法
Apr 02 PHP
php 生成加密公钥加密私钥实例详解
Jun 16 PHP
PHP实现git部署的方法教程
Dec 19 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
Zend Guard一些常见问题解答
2008/09/11 PHP
PHP stristr() 函数(不区分大小写的字符串查找)
2010/06/03 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
纯JS前端实现分页代码
2016/06/21 Javascript
JS中SetTimeout和SetInterval使用初探
2017/03/23 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
LayerClose弹窗关闭刷新方法
2018/08/17 Javascript
解决微信小程序调用moveToLocation失效问题【超简单】
2019/04/12 Javascript
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
[58:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第一场 1月31日
2021/03/11 DOTA
windows上安装Anaconda和python的教程详解
2017/03/28 Python
使用paramiko远程执行命令、下发文件的实例
2017/10/01 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
对python判断是否回文数的实例详解
2019/02/08 Python
python基础梳理(一)(推荐)
2019/04/06 Python
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
大学生农村教师实习自我鉴定
2013/09/21 职场文书
《盲人摸象》教学反思
2014/02/16 职场文书
端午节活动策划方案
2014/03/09 职场文书
优质服务活动实施方案
2014/05/02 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
政府采购方案
2014/06/12 职场文书
思想道德自我评价2015
2015/03/09 职场文书
2015年小班保育员工作总结
2015/05/27 职场文书
师范生小学见习总结
2015/06/23 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS
MySQL数据库⾼可⽤HA实现小结
2022/01/22 MySQL
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers