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 相关文章推荐
建立文件交换功能的脚本(一)
Oct 09 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
Nov 07 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
Aug 14 PHP
php中socket的用法详解
Oct 24 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
Nov 20 PHP
PHP实现的比较完善的购物车类
Dec 02 PHP
php简单日历函数
Oct 28 PHP
mysql查找删除重复数据并只保留一条实例详解
Sep 24 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
Feb 05 PHP
php实现遍历文件夹的方法汇总
Mar 02 PHP
简单实用的PHP文本缓存类实例
Mar 22 PHP
thinkPHP5框架路由常用知识点汇总
Sep 15 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银联网页支付实现方法
2015/03/04 PHP
php制作简单模版引擎
2016/04/07 PHP
功能强大的PHP发邮件类
2016/08/29 PHP
PHP设计模式(四)原型模式Prototype实例详解【创建型】
2020/05/02 PHP
(仅IE下有效)关于checkbox 三态
2007/05/12 Javascript
xheditor与validate插件冲突的解决方案
2010/04/15 Javascript
jQueryUI写一个调整分类的拖放效果实现代码
2012/05/10 Javascript
js修改input的type属性问题探讨
2013/10/12 Javascript
自己封装的javascript事件队列函数版
2014/06/12 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
Javascript之面向对象--封装
2016/12/02 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
Node.js中DNS模块学习总结
2018/02/28 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
JS实现拼图游戏
2021/01/29 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
[38:32]完美世界DOTA2联赛循环赛 Forest vs DM 第二场 11.06
2020/11/06 DOTA
Python Property属性的2种用法
2015/06/21 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
Python下的Softmax回归函数的实现方法(推荐)
2017/01/26 Python
flask session组件的使用示例
2018/12/25 Python
举例讲解Python常用模块
2019/03/08 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
2019/03/13 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
pandas按条件筛选数据的实现
2021/02/20 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
EJB3.1都有哪些改进
2012/11/17 面试题
业务员岗位职责
2013/11/16 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
运动会广播稿200字
2014/10/18 职场文书
党员个人总结范文
2015/02/14 职场文书
致运动员赞词
2015/07/22 职场文书