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 相关文章推荐
require(),include(),require_once()和include_once()区别
Mar 27 PHP
php使用curl检测网页是否被百度收录的示例分享
Jan 31 PHP
php接口和抽象类使用示例详解
Mar 02 PHP
深入解析PHP的Laravel框架中的event事件操作
Mar 21 PHP
学习PHP的数组总结【经验】
May 05 PHP
详谈PHP中的密码安全性Password Hashing
Feb 04 PHP
php中实现字符串翻转的方法
Feb 22 PHP
cakephp常见知识点汇总
Feb 24 PHP
php的常量和变量实例详解
Jun 27 PHP
详细解读php的命名空间(一)
Feb 21 PHP
php array 转json及java 转换 json数据格式操作示例
Nov 13 PHP
PHP时间相关常用函数用法示例
Jun 03 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
世界第一个无线广播电台 KDKA
2021/03/01 无线电
深入php-fpm的两种进程管理模式详解
2013/06/03 PHP
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
PHP链表操作简单示例
2016/10/15 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
js中实现字符串和数组的相互转化详解
2016/01/24 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
在vue项目中使用sass的配置方法
2018/03/20 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
nodeJS与MySQL实现分页数据以及倒序数据
2020/06/05 NodeJs
基于原生js实现九宫格算法代码实例
2020/07/03 Javascript
js实现抽奖功能
2020/11/24 Javascript
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
高效使用Python字典的清单
2018/04/04 Python
Python猴子补丁知识点总结
2020/01/05 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
python分别打包出32位和64位应用程序
2020/02/18 Python
python求前n个阶乘的和实例
2020/04/02 Python
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
中软Java笔试题
2012/11/11 面试题
函数指针的定义是什么
2016/08/14 面试题
汽车销售求职自荐信
2013/10/01 职场文书
学校安全工作制度
2014/01/19 职场文书
音乐教学案例
2014/01/30 职场文书
服务标语大全
2014/06/18 职场文书
欢迎标语大全
2014/06/21 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
《山中访友》教学反思
2016/02/24 职场文书
js Proxy的原理详解
2021/05/25 Javascript
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android
vue二维数组循环嵌套方式 循环数组、循环嵌套数组
2022/04/24 Vue.js