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 相关文章推荐
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
php设计模式 Composite (组合模式)
Jun 26 PHP
PHP之生成GIF动画的实现方法
Jun 07 PHP
PHP实现邮件群发的源码
Jun 18 PHP
探讨GDFONTPATH能否被winxp下的php支持
Jun 21 PHP
PHP错误提示的关闭方法详解
Jun 23 PHP
深入解析PHP中逗号与点号的区别
Aug 05 PHP
Zend Framework框架路由机制代码分析
Mar 22 PHP
PHP单元测试框架PHPUnit用法详解
Jan 23 PHP
Laravel 不同生产环境服务器的判断实践
Oct 15 PHP
laravel框架邮箱认证实现方法详解
Nov 22 PHP
PHP笛卡尔积实现原理及代码实例
Dec 09 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将任何格式视频转为flv的代码
2009/09/03 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
我见过最全的个人js加解密功能页面
2007/12/12 Javascript
屏蔽Flash右键信息的js代码
2010/01/17 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
NodeJS的url截取模块url-extract的使用实例
2013/11/18 NodeJs
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
谈谈JavaScript自定义回调函数
2015/10/18 Javascript
认识Knockout及如何使用Knockout绑定上下文
2015/12/25 Javascript
基于jQuery实现淡入淡出效果轮播图
2020/07/31 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
浅谈键盘上回车按钮的js触发事件
2017/02/13 Javascript
Bootstrap fileinput组件封装及使用详解
2017/03/10 Javascript
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
微信小程序开发搜索功能实现(前端+后端+数据库)
2020/03/04 Javascript
原生js实现的观察者和订阅者模式简单示例
2020/04/18 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python输入二维数组方法
2018/04/13 Python
python看某个模块的版本方法
2018/10/16 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
Python2比较当前图片跟图库哪个图片相似的方法示例
2019/09/28 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
如何利用pygame实现简单的五子棋游戏
2019/12/29 Python
python计算导数并绘图的实例
2020/02/29 Python
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
大学旷课检讨书
2014/01/28 职场文书
宗教学大学生职业生涯规划范文
2014/02/08 职场文书
运动会演讲稿300字
2014/08/25 职场文书
读群众路线的心得体会
2014/09/03 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书