smarty问题truncate截取中文字符老有乱码。高手指点啊

kilerven 2008-08-25 08:33:34
如题。有知道的指点谢谢。
...全文
376 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jlzan1314 2008-08-26
  • 打赏
  • 举报
回复
substr() 换成mb_substr() 就行了,要开启扩展.mb_string
qngzh 2008-08-25
  • 打赏
  • 举报
回复
{'afdasbdf中国管理手段建立分级分类阿斯顿发了点积分历史记录法律'|mb_truncate:15:'...':'CP936'}
qngzh 2008-08-25
  • 打赏
  • 举报
回复
我帮你解决了,写了一个Smarty的modifier插件,文件名是modifier.mb_truncate.php,放到Smarty的插件目录下
文件内容是:

<?php

function smarty_modifier_mb_truncate($string, $length = 80, $etc = '...', $encoding='UTF-8',
$break_words = false, $middle = false)
{
if ($length == 0)
return '';

if (mb_strlen($string, $encoding) > $length) {
$length -= min($length, mb_strlen($etc));
if (!$break_words && !$middle) {
$string = mb_ereg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length+1));
}
if(!$middle) {
return mb_substr($string, 0, $length) . $etc;
} else {
return mb_substr($string, 0, $length/2) . $etc . mb_substr($string, -$length/2);
}
} else {
return $string;
}
}

?>


使用的时候是这样的

{'afdasbdf中国管理手段建立分级分类阿斯顿发了点积分历史记录法律发发牢骚'|mb_truncate:15:'...':'CP936'}
结果是:
afdasbdf中国...

如果你的PHP文件编码是utf8,把上面的CP936换成UTF-8就可以了!!!

PS. 这个插件是我修改内置的truncate得出的!




qngzh 2008-08-25
  • 打赏
  • 举报
回复
这是PHP的问题,truncate使用的是strlen/substr实现的所以不支持中文

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧