关于模板中截取中文函数msubstr()不会显示省略号解决方法
时间:2011-05-27
来源:互联网
今天使用官方的中文截取函数时发现不能显示省略号(我的页面是UTF-8的编码模式),已经研究发现此存在的BUG,已经修改终于解决了这个问题。
特此发表给兄弟们,以供参考学习。
解决后的代码如下:
/**
+----------------------------------------------------------
* 字符串截取,支持中文和其他编码
+----------------------------------------------------------
* @static
* @access public
+----------------------------------------------------------
* @param string $str 需要转换的字符串
* @param string $start 开始位置,默认为0
* @param string $length 截取长度,默认为20
* @param string $charset 编码格式,默认为utf-8
* @param string $suffix 截断后尾部显示的字符,默认为空
+----------------------------------------------------------
* @return string
+----------------------------------------------------------
*/
function msubstr($str, $start=0, $length=20, $suffix='', $charset="utf-8")
{
$slice = '';
if(function_exists("mb_substr")){
$slice = mb_substr($str, $start, $length, $charset);
}elseif(function_exists('iconv_substr')) {
$slice = iconv_substr($str,$start,$length,$charset);
}else{
$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
preg_match_all($re[$charset], $str, $match);
$slice = join("",array_slice($match[0], $start, $length));
}
return $slice.$suffix;
}
在模板中的使用例子:{$data.title|msubstr=0,20,'...'}
显示效果如下:
为您推荐的三种将PHP生成静态html文...
希望可以帮到你哦!
作者: 阿咏 发布时间: 2011-05-27
这个问题我也遇到过,不过没楼主心细了,感谢分享
作者: gaoxu387 发布时间: 2011-06-05
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28