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 相关文章推荐
一个好用的分页函数
Nov 16 PHP
PHP 和 MySQL 开发的 8 个技巧
Jan 02 PHP
使用bcompiler对PHP文件进行加密的代码
Aug 29 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
Apr 18 PHP
基于empty函数的判断详解
Jun 17 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
Jul 03 PHP
php中异常处理方法小结
Jan 09 PHP
php 多文件上传的实现实例
Oct 23 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
php-fpm中max_children的配置
Mar 15 PHP
laravel dingo API返回自定义错误信息的实例
Sep 29 PHP
php实现商城购物车的思路和源码分析
Jul 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
超级简单的发送邮件程序
2006/10/09 PHP
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
PHP原生模板引擎 最简单的模板引擎
2012/04/25 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
js 操作符实例代码
2009/10/24 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
简单易用的倒计时js代码
2014/08/04 Javascript
js实现div弹出层的方法
2014/11/20 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
微信小程序 授权登录详解(附完整源码)
2019/08/23 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
python实现倒计时的示例
2014/02/14 Python
python多线程抓取天涯帖子内容示例
2014/04/03 Python
Python XML RPC服务器端和客户端实例
2014/11/22 Python
Python中将dataframe转换为字典的实例
2018/04/13 Python
python opencv3实现人脸识别(windows)
2018/05/25 Python
python实现简单多人聊天室
2018/12/11 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
Python实现KNN(K-近邻)算法的示例代码
2019/03/05 Python
python中如何使用分步式进程计算详解
2019/03/22 Python
通过实例简单了解Python中yield的作用
2019/12/11 Python
Python requests HTTP验证登录实现流程
2020/11/05 Python
pycharm配置QtDesigner的超详细方法
2021/01/25 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
学校端午节活动方案
2014/08/23 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书