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代码优化及php相关问题总结
Oct 09 PHP
搜索和替换文件或目录的一个好类--很实用
Oct 09 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
Nov 10 PHP
解析PHP多种序列化与反序列化的方法
Jun 06 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
PHP实现获取域名的方法小结
Nov 05 PHP
从刷票了解获得客户端IP的方法
Sep 21 PHP
PHP版本常用的排序算法汇总
Dec 20 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 PHP
PHP实现下载远程图片保存到本地的方法
Jun 19 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
May 23 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 - Html Transfer Code
2006/10/09 PHP
PHP中for与foreach的区别分析
2011/03/09 PHP
PHP的拦截器实例分析
2014/11/03 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
JS运动相关知识点小结(附弹性运动示例)
2016/01/08 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
Javascript仿京东放大镜的效果
2017/03/01 Javascript
Vue 父子组件的数据传递、修改和更新方法
2018/03/01 Javascript
JS实现面向对象继承的5种方式分析
2018/07/21 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
[13:40]TI3青蛙君全程回顾 DOTA2我们为梦想再战
2013/09/13 DOTA
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
Python标准库sched模块使用指南
2017/07/06 Python
Python多图片合并PDF的方法
2019/01/03 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
用python实现学生管理系统
2020/07/24 Python
如何将json数据转换为python数据
2020/09/04 Python
Python安装并操作redis实现流程详解
2020/10/13 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
家长会演讲稿范文
2014/01/10 职场文书
父亲追悼会答谢词
2014/01/17 职场文书
教师网络培训感言
2014/03/09 职场文书
《吃水不忘挖井人》教学反思
2014/04/15 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
索赔员岗位职责
2015/02/15 职场文书
在校学生证明格式
2015/06/24 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书