根据中文裁减字符串函数的php代码


Posted in PHP onDecember 03, 2013
define(CHARSET, 'UTF-8'); // 系统默认编码 /** 
* 根据中文裁减字符串 
* @param $string - 字符串 
* @param $length - 长度 
* @param $doc - 缩略后缀 
* @return 返回带省略号被裁减好的字符串 
*/ 
function cutstr( $string, $length, $dot = '...' ) { 
if ( strlen( $string ) <= $length ) { 
return $string; 
} 
$pre = chr( 1 ); 
$end = chr( 1 ); 
$string = str_replace( array( '&', '"', '<', '>' ), array( $pre . '&' . $end, $pre . '"' . $end, $pre . '<' . $end, $pre . '>' . $end ), $string ); 
$strcut = ''; 
if ( strtolower( CHARSET ) == 'utf-8' ) { 
$n = $tn = $noc = 0; 
while ( $n < strlen( $string ) ) { 
$t = ord( $string[$n] ); 
if ( $t == 9 || $t == 10 || (32 <= $t && $t <= 126) ) { 
$tn = 1; 
$n++; 
$noc++; 
} elseif ( 194 <= $t && $t <= 223 ) { 
$tn = 2; 
$n += 2; 
$noc += 2; 
} elseif ( 224 <= $t && $t <= 239 ) { 
$tn = 3; 
$n += 3; 
$noc += 2; 
} elseif ( 240 <= $t && $t <= 247 ) { 
$tn = 4; 
$n += 4; 
$noc += 2; 
} elseif ( 248 <= $t && $t <= 251 ) { 
$tn = 5; 
$n += 5; 
$noc += 2; 
} elseif ( $t == 252 || $t == 253 ) { 
$tn = 6; 
$n += 6; 
$noc += 2; 
} else { 
$n++; 
} 
if ( $noc >= $length ) { 
break; 
} 
} 
if ( $noc > $length ) { 
$n -= $tn; 
} 
$strcut = substr( $string, 0, $n ); 
} else { 
for ( $i = 0; $i < $length; $i++ ) { 
$strcut .= ord( $string[$i] ) > 127 ? $string[$i] . $string[++$i] : $string[$i]; 
} 
} 
$strcut = str_replace( array( $pre . '&' . $end, $pre . '"' . $end, $pre . '<' . $end, $pre . '>' . $end ), array( '&', '"', '<', '>' ), $strcut ); 
$pos = strrpos( $strcut, chr( 1 ) ); 
if ( $pos !== false ) { 
$strcut = substr( $strcut, 0, $pos ); 
} 
return $strcut . $dot; 
}
PHP 相关文章推荐
PHP 各种排序算法实现代码
Aug 20 PHP
php select,radio和checkbox默认选择的实现方法
May 15 PHP
php数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
php中防止SQL注入的最佳解决方法
Apr 25 PHP
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
Jun 23 PHP
PHP文件缓存类示例分享
Jan 30 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
PHP购物车类Cart.class.php定义与用法示例
Jul 20 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
Nov 03 PHP
php传值和传引用的区别点总结
Nov 19 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
Dec 03 #PHP
php查找任何页面上的所有链接的方法
Dec 03 #PHP
php实现查看邮件是否已被阅读的方法
Dec 03 #PHP
php 模拟 asp.net webFrom 按钮提交事件的思路及代码
Dec 02 #PHP
php中{}大括号是什么意思
Dec 01 #PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
Nov 28 #PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 #PHP
You might like
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
PHP伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
php实现的生成排列算法示例
2019/07/25 PHP
PhpSpreadsheet设置单元格常用操作汇总
2020/11/13 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
简约JS日历控件 实例代码
2013/07/12 Javascript
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
2017/03/08 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
爬虫利器Puppeteer实战
2019/01/09 Javascript
layui实现数据表格table分页功能(ajax异步)
2019/07/27 Javascript
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
[18:16]sakonoko 2017年卡尔集锦
2018/02/06 DOTA
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
python实现2048小游戏
2015/03/30 Python
讲解Python中if语句的嵌套用法
2015/05/14 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
联想阿根廷官方网站:Lenovo Argentina
2019/10/14 全球购物
运动会广播稿50字
2014/01/26 职场文书
大学中国梦演讲稿
2014/04/23 职场文书
医学专业大学生求职信
2014/07/12 职场文书
党员个人公开承诺书
2014/08/29 职场文书
个人存款证明书
2014/10/18 职场文书
市场营销计划书范文
2015/01/16 职场文书
父亲节寄语大全
2015/02/27 职场文书
企业战略合作意向书
2015/05/08 职场文书
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
MySql数据库 查询时间序列间隔
2022/05/11 MySQL