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简单静态页生成过程
Mar 27 PHP
Discuz 6.0+ 批量注册用户名
Sep 13 PHP
PHP中使用数组实现堆栈数据结构的代码
Feb 05 PHP
php中设置index.php文件为只读的方法
Feb 06 PHP
PHP6 中可能会出现的新特性预览
Apr 04 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
May 08 PHP
Yii使用find findAll查找出指定字段的实现方法
Sep 05 PHP
Symfony核心类概述
Mar 17 PHP
PHP使用http_build_query()构造URL字符串的方法
Apr 02 PHP
thinkphp分页实现效果
Oct 13 PHP
apache集成php7.3.5的详细步骤
Jun 20 PHP
php写app用的框架整理
Sep 29 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
FCKeditor的安装(PHP)
2007/01/13 PHP
PHP实现MySQL更新记录的代码
2008/06/07 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
php堆排序(heapsort)练习
2013/11/13 PHP
PHP代码实现表单数据验证类
2015/07/28 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
Yii2中使用join、joinwith多表关联查询
2016/06/30 PHP
php封装的数据库函数与用法示例【参考thinkPHP】
2016/11/08 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
2019/10/03 PHP
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
php的文件上传入门教程(实例讲解)
2014/04/10 Javascript
javascript在IE下trim函数无法使用的解决方法
2014/09/12 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
jQuery中[attribute*=value]选择器用法实例
2014/12/31 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
JS基于clipBoard.js插件实现剪切、复制、粘贴
2016/05/03 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
vue使用pdfjs显示PDF可复制的实现方法
2018/12/14 Javascript
JS数据类型判断的几种常用方法
2020/07/07 Javascript
使用python编写udp协议的ping程序方法
2018/04/22 Python
pandas 小数位数 精度的处理方法
2018/06/09 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
浅析pandas 数据结构中的DataFrame
2019/10/12 Python
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
意大利体育用品和运动服网上商店:Maxi Sport
2019/09/14 全球购物
优秀毕业生求职信范文
2014/01/02 职场文书
《童年的发现》教学反思
2014/02/14 职场文书
公司节能减排方案
2014/05/16 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
2015年工会工作总结
2015/03/30 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书