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格式化工具Beautify PHP小小BUG
Apr 24 PHP
php smarty模版引擎中变量操作符及使用方法
Dec 11 PHP
php与paypal整合方法
Nov 28 PHP
php 获取本地IP代码
Jun 23 PHP
destoon调用企业会员公司形象图片的实现方法
Aug 21 PHP
微信公众平台消息接口校验与消息接口响应实例
Dec 23 PHP
php创建无限级树型菜单
Nov 05 PHP
Symfony2在Nginx下的配置方法图文教程
Feb 04 PHP
PHP框架Laravel插件Pagination实现自定义分页
Apr 22 PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 PHP
PHP守护进程化在C和PHP环境下的实现
Nov 21 PHP
PHP文件上传小程序 适合初学者学习!
May 23 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中curl_multi的应用
2013/07/17 PHP
PHP callback函数使用方法和注意事项
2015/01/23 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
PHP Swoole异步Redis客户端实现方法示例
2019/10/24 PHP
QQ登录简单实现代码
2021/03/09 Javascript
Highslide.js是一款基于js实现的网页中图片展示插件
2020/03/30 Javascript
js function使用心得
2010/05/10 Javascript
JQuery.Ajax之错误调试帮助信息介绍
2013/07/04 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
js数组方法reduce经典用法代码分享
2018/01/07 Javascript
JavaScript笛卡尔积超简单实现算法示例
2018/07/30 Javascript
解决Angular4项目部署到服务器上刷新404的问题
2018/08/31 Javascript
解决vue组件props传值对象获取不到的问题
2019/06/06 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
2020/10/23 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
[02:10]DOTA2亚洲邀请赛 EG战队出场宣传片
2015/02/07 DOTA
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
python编程羊车门问题代码示例
2017/10/25 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
2018/05/17 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
详解Python利用random生成一个列表内的随机数
2019/08/21 Python
python3 map函数和filter函数详解
2019/08/26 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
介绍一下Linux文件的记录形式
2013/09/29 面试题
双方协议书
2014/04/22 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
幼儿园欢迎词范文
2015/01/26 职场文书
初婚初育证明范本
2015/06/18 职场文书
志愿服务心得体会
2016/01/15 职场文书