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 ftp文件上传函数(基础版)
Jun 03 PHP
PHP 函数学习简单小结
Jul 08 PHP
PHP常用技术文之文件操作和目录操作总结
Sep 27 PHP
php查看当前Session的ID实例
Mar 16 PHP
php检查字符串中是否包含7位GSM字符的方法
Mar 17 PHP
php按单词截取字符串的方法
Apr 07 PHP
php从数据库查询结果生成树形列表的方法
Apr 17 PHP
Yii2中SqlDataProvider用法示例
Sep 22 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
Sep 30 PHP
php封装的smartyBC类完整实例
Oct 19 PHP
TP5框架请求响应参数实例分析
Oct 17 PHP
phpstudy2020搭建站点的实现示例
Oct 30 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个人网站架设连环讲(二)
2006/10/09 PHP
模仿OSO的论坛(三)
2006/10/09 PHP
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
PHP 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
PHP使用php-resque库配合Redis实现MQ消息队列的教程
2016/06/29 PHP
小试JQuery的AutoComplete插件
2011/05/04 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
jquery 查找iframe父级页面元素的实现代码
2011/08/28 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
6种javascript显示当前系统时间代码
2015/12/01 Javascript
javascript每日必学之继承
2016/02/23 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
从零学习node.js之模块规范(一)
2017/02/21 Javascript
你可能不知道的JSON.stringify()详解
2017/08/17 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
vue基于element的区间选择组件
2018/09/07 Javascript
读懂CommonJS的模块加载
2019/04/19 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
通过C++学习Python
2015/01/20 Python
对Python Class之间函数的调用关系详解
2019/01/23 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
在线服装零售商:SheIn
2016/07/22 全球购物
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
优秀士兵个人事迹材料
2014/01/19 职场文书
租房合同协议书
2014/04/09 职场文书
党员志愿者活动方案
2014/08/28 职场文书
培训简讯范文
2015/07/20 职场文书
决心书格式及范文
2019/06/24 职场文书