本文实例讲述了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;

}

PS:这里再为大家推荐几款在线字符统计工具供大家参考:

希望本文所述对大家PHP程序设计有所帮助。

php判断字符串里有英文,PHP针对中英文混合字符串长度判断及截取方法示例相关推荐

  1. C#实现 获取指定字节长度 中英文混合字符串 的方法

    平时在作数据库插入操作时,如果用 INSERT 语句向一个varchar型字段插入内容时,有时会因为插入的内容长度超出规定的长度而报错.尤其是插入中英文混合字符串时,SQL Server中一般中文要占 ...

  2. 中英文混合字符串长度的获取

    在项目中要处理中英文混合字符串的长度,中文按2个字符算,英文按1个字符算.以下是我处理的方法,不知道有没有更好的方法. private int GetGBLength(string strData) ...

  3. ASP如何计算中英文混合字符串长度和截取字符串

    用ASP做网站的时候经常会碰到要截取字符串的情况.ASP中的Len函数不管是中文字符,还是英文字符,统统按一个单位来计算,由于一个中文字符的宽度是一个英文字符宽度的两倍,在中英文混合的情况下字符串实际 ...

  4. Javascript中得到中英文混合字符串的长度

    有同事在公司的OA上发了个贴子,介绍在javascript中如何得到中英文混合字符串的长度. 用的是正则表达式. var str = "坦克是tank的音译";var len = ...

  5. 计算中英文混合字符串长度

    - (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view.//第一种方法NS ...

  6. php截取英语,php 截取中英文混合字符串的方法

    php 截取中应为字符串,就不必再用substr或者mb_substr //截取想这样的字符串 a李三 利用ASCII /** * * 中英混合的字符串截取 * @param unknown_type ...

  7. PHP截取中英文混合字符串

    <?php /*** 截取中英文混合字符串* @param $sourcestr 需要截取的字符串* @param $start 开始位置,字符位置,* @param $cutlength 结束 ...

  8. qt判断读入的字符串是否含有英文_459. 重复的子字符串

    给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000.示例 1:输入: "abab"输出: True解释: 可由 ...

  9. qt判断读入的字符串是否含有英文_重复的子字符串

    给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000.示例 1:输入: "abab"输出: True解释: 可由 ...

最新文章

  1. msdn画圆弧函数_复变函数与积分变换 简明笔记(八):保形映射(共形映射)
  2. mysql架构设计书籍推荐_最近很火的MySQL:抛开复杂的架构设计,MySQL优化思想基本都在这...
  3. ubuntu php 源,Ubuntu18.04更换国内源
  4. Android\OPhone动画分析之翻转效果
  5. 改变世界的5大常数,学过数学的人,这一辈子都不会忘记!
  6. python手把手教程_【Python 1-7】Python手把手教程之——详解列表List
  7. gromacs 安装_GROMACS:粗粒化力场建立和模拟上线!
  8. 如何在SQLite中检查表是否存在?
  9. PowerDesigner实用技巧小结(4)
  10. AS技巧合集「常用技巧篇」
  11. thread/threading——Python多线程入门笔记
  12. (三)洞悉linux下的Netfilteriptables:内核中的rule,match和target
  13. Linux下使用源码编译方式安装zlib
  14. php 字库,矢量字库的剪裁_php
  15. yolo系列的head模块
  16. C++实现string的spilt功能-temp
  17. 机器学习-训练了一个高效快速识别身份证正面关键信息的模型
  18. uniapp uniCloud 云开发上传图片与查看图片
  19. 计时器计算小时、分钟、秒数
  20. Ditto 复制粘贴

热门文章

  1. 【速学速记】Python 高阶函数
  2. Webpack打包构建太慢了?试试几个方法
  3. linux(一)export的生命周期
  4. “租房帮”产品体验报告
  5. 一个拖拽的效果类和dom-drag.js
  6. 用户虚拟地址转换成物理地址
  7. 【讨论】不得不重视的问题:信息太多!信息太杂!
  8. DataSet读写xml文件
  9. oracle分区表官方指南
  10. bzoj 1026: [SCOI2009]windy数