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 相关文章推荐
Windows下的PHP5.0安装配制详解
Sep 05 PHP
也谈 PHP 和 MYSQL
Oct 09 PHP
PHP三层结构(上) 简单三层结构
Jul 04 PHP
PHP利用str_replace防注入的方法
Nov 10 PHP
phpword插件导出word文件时中文乱码问题处理方案
Aug 19 PHP
PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题
Nov 30 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
PHP下载远程图片的几种方法总结
Apr 07 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
Jul 18 PHP
PHP实现微信红包金额拆分试玩的算法示例
Apr 07 PHP
PHP parse_ini_file函数的应用与扩展操作示例
Jan 07 PHP
thinkPHP5框架接口写法简单示例
Aug 05 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
星际中一些鲜为人知的详细资料
2020/03/04 星际争霸
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
tangram框架响应式加载图片方法
2013/11/21 Javascript
可恶的ie8提示缺少id未定义
2014/03/20 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
2017/01/20 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
浅谈Koa服务限流方法实践
2017/10/23 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
layui的select联动实现代码
2019/09/28 Javascript
Element MessageBox弹框的具体使用
2020/07/27 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[03:00]2018完美盛典_最佳英雄奖
2018/12/17 DOTA
Python实现信用卡系统(支持购物、转账、存取钱)
2016/06/24 Python
Python unittest模块用法实例分析
2018/05/25 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
一篇文章搞懂Python的类与对象名称空间
2018/12/10 Python
使用python实现哈希表、字典、集合操作
2019/12/22 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
sklearn的predict_proba使用说明
2020/06/28 Python
美国派对用品及装饰品网上商店:Shindigz
2016/07/30 全球购物
10的分与合教学反思
2014/04/30 职场文书
干部职工纪律作风整改措施思想汇报
2014/10/11 职场文书
2015年大学生工作总结
2015/04/21 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书