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 文件扩展名 获取函数
Jun 03 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
Dec 06 PHP
PHP CURL获取cookies模拟登录的方法
Nov 04 PHP
小谈php正则提取图片地址
Mar 27 PHP
Thinkphp模板中截取字符串函数简介
Jun 17 PHP
php实现与erlang的二进制通讯实例解析
Jul 23 PHP
PHP将字符分解为多个字符串的方法
Nov 22 PHP
php简单图像创建入门实例
Jun 10 PHP
Yii2使用自带的UploadedFile实现的文件上传
Jun 20 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
php使用redis的有序集合zset实现延迟队列应用示例
Feb 20 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程序--记数器
2006/10/09 PHP
PHP文件下载类
2006/12/06 PHP
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
2013/06/29 PHP
关于php内存不够用的快速解决方法
2013/10/26 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
浅析php-fpm静态和动态执行方式的比较
2016/11/09 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
Javascript &amp; DHTML 实例编程(教程)基础知识
2007/06/02 Javascript
基于jquery实现漂亮的动态信息提示效果
2011/08/02 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
jQuery添加和删除输入文本框标签代码
2016/05/20 Javascript
jQuery Ajax Post 回调函数不执行问题的解决方法
2016/08/15 Javascript
老生常谈js数据类型
2017/08/03 Javascript
微信小程序富文本渲染引擎的详解
2017/09/30 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
Promise扫盲贴
2019/06/24 Javascript
vue引入微信sdk 实现分享朋友圈获取地理位置功能
2019/07/04 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
VUE table表格动态添加一列数据,新增的这些数据不可以编辑(v-model绑定的数据不能实时更新)
2020/04/03 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
Python中列表、字典、元组数据结构的简单学习笔记
2016/03/20 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
Python SQL查询并生成json文件操作示例
2018/08/17 Python
Python编写万花尺图案实例
2021/01/03 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
学习党课思想汇报
2013/12/29 职场文书
网络管理员岗位职责
2014/03/17 职场文书
查摆剖析材料范文
2014/09/30 职场文书
2015年党员自我剖析材料
2014/12/17 职场文书
全国助残日活动总结
2015/05/11 职场文书
选择比努力更重要?这是长期以来对“努力”的最大误解
2019/07/12 职场文书