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 相关文章推荐
利用递归把多维数组转为一维数组的函数
Oct 09 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
Mar 30 PHP
php minixml详解
Jul 19 PHP
php异常处理技术,顶级异常处理器
Jun 13 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
Oct 26 PHP
用php守护另一个php进程的例子
Feb 13 PHP
PHP输出九九乘法表代码实例
Mar 27 PHP
PHP自毁程序(慎用)
Jul 09 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
Mar 11 PHP
PHP实现163邮箱自动发送邮件
Mar 29 PHP
PHP使用curl_multi实现并发请求的方法示例
Apr 29 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
Nov 26 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中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
JavaScript 函数replace深入了解
2013/03/14 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
jQuery实现右侧显示可向左滑动展示的深色QQ客服效果代码
2015/10/23 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
基于代数方程库Algebra.js解二元一次方程功能示例
2017/06/09 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
微信小程序使用progress组件实现显示进度功能【附源码下载】
2017/12/12 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
AngularJS使用Filter自定义过滤器控制ng-repeat去除重复功能示例
2018/04/21 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
typescript nodejs 依赖注入实现方法代码详解
2019/07/21 NodeJs
深入理解javascript中的this
2021/02/08 Javascript
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
python实现计算资源图标crc值的方法
2014/10/05 Python
Python编程之属性和方法实例详解
2015/05/19 Python
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
Python的多态性实例分析
2015/07/07 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
python版飞机大战代码分享
2018/11/20 Python
python开头的coding设置方法
2019/08/08 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
python中的unittest框架实例详解
2021/02/05 Python
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
打架检讨书800字
2014/01/10 职场文书
分层教学实施方案
2014/03/19 职场文书
2014年组织部工作总结
2014/11/14 职场文书
自主招生学校推荐信范文
2015/03/26 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS