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 相关文章推荐
Dedecms常用函数解析
Feb 01 PHP
PHPExcel读取Excel文件的实现代码
Dec 06 PHP
PHP中如何定义和使用常量
Feb 28 PHP
遭遇php的in_array低性能问题
Sep 17 PHP
php后门URL的防范
Nov 12 PHP
php + nginx项目中的权限详解
May 23 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
Laravel配置全局公共函数的方法步骤
May 09 PHP
微信公众号之主动给用户发送消息功能
Jun 22 PHP
PHP实现的抓取小说网站内容功能示例
Jun 27 PHP
laravel-admin 实现在指定的相册下添加照片
Oct 21 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 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
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
PHP IDE phpstorm 常用快捷键
2015/05/18 PHP
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
Jquery刷新页面背景图片随机变换的实现方法
2013/03/15 Javascript
jQuery filter函数使用方法
2014/05/19 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
js如何编写简单的ajax方法库
2017/08/02 Javascript
微信小程序 rich-text的使用方法
2017/08/04 Javascript
js异步编程小技巧详解
2017/08/14 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
JavaScript 下载svg图片为png格式
2018/06/21 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
vue与原生app的对接交互的方法(混合开发)
2018/11/28 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
构建大型 Vue.js 项目的10条建议(小结)
2019/11/14 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
[08:02]DOTA2牵红线 zhou神抱得美人归
2014/03/22 DOTA
Python挑选文件夹里宽大于300图片的方法
2015/03/05 Python
深入了解Python在HDA中的应用
2019/09/05 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
2020/09/03 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
PHP如何去执行一个SQL语句
2016/03/05 面试题
消防应急演练方案
2014/02/12 职场文书
英语教师自荐信
2014/05/26 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
教师求职自荐信范文
2015/03/04 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
MySQL基础快速入门知识总结(附思维导图)
2021/09/25 MySQL
解决 redis 无法远程连接
2022/05/15 Redis