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 相关文章推荐
mysql5写入和读出乱码解决
Nov 25 PHP
zen cart新进商品的随机排序修改方法
Sep 10 PHP
PHP file_exists问题杂谈
May 07 PHP
利用curl抓取远程页面内容的示例代码
Jul 23 PHP
php接口和抽象类使用示例详解
Mar 02 PHP
PHP实现中文圆形印章特效
Jun 19 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
Feb 14 PHP
php实现图片缩略图的方法
Mar 29 PHP
Yii安装与使用Excel扩展的方法
Jul 13 PHP
PHP构造函数与析构函数用法示例
Sep 28 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
php+websocket 实现的聊天室功能详解
May 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
php 模拟POST提交的2种方法详解
2013/06/17 PHP
PHP请求Socket接口测试实例
2016/08/12 PHP
PHP-FPM和Nginx的通信机制详解
2019/02/01 PHP
PHP中16个高危函数整理
2019/09/19 PHP
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
js添加select下默认的option的value和text的方法
2014/10/19 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
详解Angular.js中$http拦截器的介绍及使用
2017/07/04 Javascript
jQuery AJAX 方法success()后台传来的4种数据详解
2018/08/08 jQuery
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
javascript实现滚轮轮播图片
2020/12/13 Javascript
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
Python中利用sqrt()方法进行平方根计算的教程
2015/05/15 Python
python统计日志ip访问数的方法
2015/07/06 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
pytorch 调整某一维度数据顺序的方法
2018/12/08 Python
python命令行工具Click快速掌握
2019/07/04 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
Python PIL库图片灰化处理
2020/04/07 Python
python 双循环遍历list 变量判断代码
2020/05/04 Python
联想哥伦比亚网上商城:Lenovo Colombia
2017/01/10 全球购物
银行求职推荐信范文
2013/11/30 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
2014年学习委员工作总结
2014/11/14 职场文书
《追风筝的人》:人心中的成见是座大山,但请不忘初心
2019/11/15 职场文书
Java基础——Map集合
2022/04/01 Java/Android
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
2022/04/11 Python