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 魔术函数使用说明
Feb 21 PHP
php 文件缓存函数
Oct 08 PHP
PHP json格式和js json格式 js跨域调用实现代码
Sep 08 PHP
file_get_contents获取不到网页内容的解决方法
Mar 07 PHP
js限制checkbox勾选的个数以及php获取多个checkbbox的方法深入解析
Jul 18 PHP
php实现监听事件
Nov 06 PHP
php实现数组筛选奇数和偶数示例
Apr 11 PHP
CodeIgniter安全相关设置汇总
Jul 03 PHP
php中关于socket的系列函数总结
May 18 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
Mar 21 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
May 12 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
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程序时遇到的三个问题
2012/01/17 PHP
php实现的ping端口函数实例
2014/11/12 PHP
Yii中表单用法实例详解
2016/01/05 PHP
PHP INT类型在内存中占字节详解
2019/07/20 PHP
JavaScript 判断日期格式是否正确的实现代码
2011/07/04 Javascript
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
2014/09/13 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
javascript实现tab切换的四种方法
2015/11/05 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
2016/08/02 Javascript
关于JS中二维数组的声明方法
2016/09/24 Javascript
jquery popupDialog 使用 加载jsp页面的方法
2016/10/25 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
JavaScript html5 canvas实现图片上画超链接
2017/10/20 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
全面解析vue router 基本使用(动态路由,嵌套路由)
2018/09/02 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
Python HTMLTestRunner库安装过程解析
2020/05/25 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
瑞贝卡·明可弗包包官网:Rebecca Minkoff
2016/07/21 全球购物
创新比赛获奖感言
2014/02/13 职场文书
考试作弊检讨书大全
2014/02/18 职场文书
成语的广告词
2014/03/19 职场文书
党员承诺书范文
2014/05/19 职场文书
新法人代表任命书
2014/06/06 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
小学生通知书评语
2014/12/31 职场文书
导游词之青岛太清宫
2019/12/13 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
解决IIS7下无法绑定https主机的问题
2022/04/29 Servers