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程序中的常见漏洞进行攻击
Oct 09 PHP
PHP网上调查系统
Oct 09 PHP
PHP程序61条面向对象分析设计的经验小结
Nov 12 PHP
php中防止伪造跨站请求的小招式
Sep 02 PHP
php 团购折扣计算公式
Nov 24 PHP
PHP PDOStatement:bindParam插入数据错误问题分析
Nov 13 PHP
php使用curl存储cookie的示例
Mar 31 PHP
ThinkPHP处理Ajax返回的方法
Nov 22 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
CI框架入门之MVC简单示例
Nov 21 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
定位地理位置PHP判断员工打卡签到经纬度是否在打卡之内
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制作的意见反馈表源码
2007/03/11 PHP
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
PHP中__autoload和Smarty冲突的简单解决方法
2016/04/08 PHP
PHP查看SSL证书信息的方法
2016/09/22 PHP
JS写的数字拼图小游戏代码[学习参考]
2008/10/29 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
使用iojs的jsdom库实现同步系统时间
2015/04/20 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
Javascript中的数据类型之旅
2015/10/18 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
纯JavaScript 实现flappy bird小游戏实例代码
2016/09/27 Javascript
原生JS实现圣旨卷轴展开效果
2017/03/06 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
基于js的变量提升和函数提升(详解)
2017/09/17 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
对django views中 request, response的常用操作详解
2019/07/17 Python
python程序需要编译吗
2020/06/19 Python
django前端页面下拉选择框默认值设置方式
2020/08/09 Python
ubuntu16.04升级Python3.5到Python3.7的方法步骤
2020/08/20 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
CSS3 :default伪类选择器使用简介
2018/03/15 HTML / CSS
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
使用phonegap进行提示操作的具体方法
2017/03/30 HTML / CSS
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
StringBuilder和String的区别
2015/05/18 面试题
幼儿园开学家长寄语
2014/01/19 职场文书
考核工作实施方案
2014/03/30 职场文书
主管竞聘书范文
2014/03/31 职场文书
2014年领班工作总结
2014/11/25 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
电力安全学习心得体会
2016/01/18 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书