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 相关文章推荐
mysql总结之explain
Feb 27 PHP
解析zend Framework如何自动加载类
Jun 28 PHP
解析数组非数字键名引号的必要性
Aug 09 PHP
php sybase_fetch_array使用方法
Apr 15 PHP
PHP中使用循环实现的金字塔图形
Nov 08 PHP
php对象和数组相互转换的方法
May 12 PHP
CodeIgniter与PHP5.6的兼容问题
Jul 16 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 PHP
php curl常用的5个经典例子
Jan 20 PHP
PHP读取Excel类文件
May 15 PHP
通过源码解析Laravel的依赖注入
Jan 22 PHP
PHP实现Redis单据锁以及防止并发重复写入
Apr 10 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
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
2016/05/17 PHP
php关闭warning问题的解决方法
2016/05/17 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
2019/08/14 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
用js得到网页中所有的div的id
2020/10/19 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
javascript判断用户浏览器插件安装情况的代码
2011/01/01 Javascript
写了10年的Javascript也未必全了解的连续赋值运算
2011/03/25 Javascript
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
关于js里的this关键字的理解
2015/08/17 Javascript
angular+ionic 的app上拉加载更新数据实现方法
2017/01/16 Javascript
JavaScript无缝滚动效果的实例代码
2017/03/27 Javascript
vue.js template模板的使用(仿饿了么布局)
2018/08/13 Javascript
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
Python多线程同步Lock、RLock、Semaphore、Event实例
2014/11/21 Python
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
python 实现多维数组转向量
2019/11/30 Python
使用 Python 处理3万多条数据只要几秒钟
2020/01/19 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
CSS3制作轮播图的一种方法
2019/11/11 HTML / CSS
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
芬兰设计商店美国:Finnish Design Shop US
2019/03/25 全球购物
求职推荐信范文
2013/12/01 职场文书
自荐信封面
2013/12/04 职场文书
面试自我介绍演讲稿
2014/04/29 职场文书
导师就业推荐信范文
2014/05/22 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
任命书标准格式
2015/03/02 职场文书