这里有新鲜出炉的 PHP 设计模式,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
这篇文章主要介绍了 PHP 针对中英文混合字符串长度判断及截取方法, 结合实例形式分析了 php 中英文字符串的遍历、转换、截取、计算等相关操作技巧, 需要的朋友可以参考下
本文实例讲述了 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 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0809/340280.html