PHP针对中英文混合字符串长度判断及截取方法示例


Posted in PHP onMarch 31, 2017

本文实例讲述了PHP针对中英文混合字符串长度判断及截取方法。分享给大家供大家参考,具体如下:

/**
 * 
 * 中英混合字符串长度判断 
 * @param unknown_type $str
 * @param unknown_type $charset
 */
function strLength($str, $charset = 'utf-8') {
  if ($charset == 'utf-8')
    $str = iconv ( 'utf-8', 'gb2312', $str );
  $num = strlen ( $str );
  $cnNum = 0;
  for($i = 0; $i < $num; $i ++) {
    if (ord ( substr ( $str, $i + 1, 1 ) ) > 127) {
      $cnNum ++;
      $i ++;
    }
  }
  $enNum = $num - ($cnNum * 2);
  $number = ($enNum / 2) + $cnNum;
  return ceil ( $number );
}
/**
 * 
 * 中英混合的字符串截取
 * @param unknown_type $sourcestr
 * @param unknown_type $cutlength
 */
function cut_str($sourcestr, $cutlength) {
  $returnstr = '';
  $i = 0;
  $n = 0;
  $str_length = strlen ( $sourcestr ); //字符串的字节数 
  while ( ($n < $cutlength) and ($i <= $str_length) ) {
    $temp_str = substr ( $sourcestr, $i, 1 );
    $ascnum = Ord ( $temp_str ); //得到字符串中第$i位字符的ascii码 
    if ($ascnum >= 224) //如果ASCII位高与224,
    {
      $returnstr = $returnstr . substr ( $sourcestr, $i, 3 ); //根据UTF-8编码规范,将3个连续的字符计为单个字符   
      $i = $i + 3; //实际Byte计为3
      $n ++; //字串长度计1
    } elseif ($ascnum >= 192) //如果ASCII位高与192,
    {
      $returnstr = $returnstr . substr ( $sourcestr, $i, 2 ); //根据UTF-8编码规范,将2个连续的字符计为单个字符 
      $i = $i + 2; //实际Byte计为2
      $n ++; //字串长度计1
    } elseif ($ascnum >= 65 && $ascnum <= 90) //如果是大写字母,
    {
      $returnstr = $returnstr . substr ( $sourcestr, $i, 1 );
      $i = $i + 1; //实际的Byte数仍计1个
      $n ++; //但考虑整体美观,大写字母计成一个高位字符
    } else //其他情况下,包括小写字母和半角标点符号,
    {
      $returnstr = $returnstr . substr ( $sourcestr, $i, 1 );
      $i = $i + 1; //实际的Byte数计1个
      $n = $n + 0.5; //小写字母和半角标点等与半个高位字符宽...
    }
  }
  if ($str_length > $cutlength) {
    $returnstr = $returnstr . "..."; //超过长度时在尾处加上省略号
  }
  return $returnstr;
}
PHP 相关文章推荐
php.ini中的php-5.2.0配置指令详解
Mar 27 PHP
php发送get、post请求的6种方法简明总结
Jul 08 PHP
thinkphp浏览历史功能实现方法
Oct 29 PHP
php合并数组中相同元素的方法
Nov 13 PHP
php项目中百度 UEditor 简单安装调试和调用
Jul 15 PHP
Symfony2联合查询实现方法
Mar 18 PHP
PHP迭代器接口Iterator用法分析
Dec 28 PHP
PHP addAttribute()函数讲解
Feb 03 PHP
PHP抽象类和接口用法实例详解
Jul 20 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
Oct 16 PHP
PHP设计模式入门之状态模式原理与实现方法分析
Apr 26 PHP
PHP实现两种排课方式
Jun 26 PHP
微信小程序 消息推送php服务器验证实例详解
Mar 30 #PHP
Yii2使用$this-&gt;context获取当前的Module、Controller(控制器)、Action等
Mar 29 #PHP
PHP的反射机制实例详解
Mar 29 #PHP
php面向对象之反射功能与用法分析
Mar 29 #PHP
PHP命名空间namespace的定义方法详解
Mar 29 #PHP
php mysql_list_dbs()函数用法示例
Mar 29 #PHP
php json相关函数用法示例
Mar 28 #PHP
You might like
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
PHP实现的mongoDB数据库操作类完整实例
2018/04/10 PHP
Jquery 学习笔记(一)
2009/10/13 Javascript
jquery判断checkbox(复选框)是否被选中的代码
2010/10/20 Javascript
javascript学习笔记(八) js内置对象
2012/06/19 Javascript
IE下写xml文件的两种方式(fso/saveAs)
2013/08/05 Javascript
jQuery 隐藏和显示 input 默认值示例
2014/06/03 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
jquery实现右侧栏菜单选择操作
2016/03/04 Javascript
Javascript 调用 ActionScript 的简单方法
2016/09/22 Javascript
Javascript中for循环语句的几种写法总结对比
2017/01/23 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
Vue-router 报错NavigationDuplicated的解决方法
2020/03/31 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
python通过urllib2爬网页上种子下载示例
2014/02/24 Python
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
Python实现的简单排列组合算法示例
2018/07/04 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
tensorflow指定CPU与GPU运算的方法实现
2020/04/21 Python
通过实例解析python创建进程常用方法
2020/06/19 Python
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
STP的判定过程
2012/10/01 面试题
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
农业局党的群众路线教育实践活动整改方案
2014/09/20 职场文书
参观邀请函范文
2015/02/02 职场文书
重阳节活动主持词
2015/07/04 职场文书
初级职称评定工作总结
2015/08/13 职场文书
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫