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 相关文章推荐
Adodb的十个实例(清晰版)
Dec 31 PHP
PHP自动识别字符集并完成转码详解
Aug 02 PHP
phpmyadmin打开很慢的解决方法
Apr 21 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
May 10 PHP
PHP 实现代码复用的一个方法 traits新特性
Feb 22 PHP
PHP面向对象之后期静态绑定功能介绍
May 18 PHP
php中bind_param()函数用法分析
Mar 28 PHP
浅谈PHP面向对象之访问者模式+组合模式
May 22 PHP
理清PHP在Linxu下执行时的文件权限方法
Jun 07 PHP
PHP连接MySQL数据库并以json格式输出
May 21 PHP
laravel5.1 ajax post 传值_token示例
Oct 24 PHP
thinkphp框架类库扩展操作示例
Nov 26 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 和 MySQL 基础教程(一)
2006/10/09 PHP
MySQL中create table语句的基本语法是
2007/01/15 PHP
快速开发一个PHP扩展图文教程
2008/12/12 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
php中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
Javascript基础知识(三)BOM,DOM总结
2014/09/29 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
CSS或者JS实现鼠标悬停显示另一元素
2016/01/22 Javascript
基于require.js的使用(实例讲解)
2017/09/07 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
vue-cli3.0配置及使用注意事项详解
2018/09/05 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
Vue中添加滚动事件设置的方法详解
2020/09/14 Javascript
[01:29:42]Liquid vs VP Supermajor决赛 BO 第一场 6.10
2018/07/05 DOTA
python线程池的实现实例
2013/11/18 Python
python递归查询菜单并转换成json实例
2017/03/27 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
django自定义非主键自增字段类型详解(auto increment field)
2020/03/30 Python
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
中秋寄语大全
2014/04/11 职场文书
2014年销售人员工作总结
2014/11/27 职场文书
Win11安装升级时提示“该电脑必须支持安全启动”
2022/04/19 数码科技
MySQL数据库中的锁、解锁以及删除事务
2022/05/06 MySQL