修正C-blog针对utf8 断句乱码的bug

[ 2007-11-09 18:06 | 作者: 阿少 ]
字体: | |
C-blog非常好用,但UTF-8版本有个非常明显的bug,就是对汉语断句出现乱码,经过仔细分析找到原因所在,原因在于/include/smarty/libs/plugins/modifier.truncate.php文件中的函数smarty_modifier_truncate 有问题,没有针对utf8字符做处理。

重新写一个函数如下:


引用:

function truncate_utf8($string, $len, $wordsafe = FALSE, $dots = FALSE) {
$slen = strlen($string);
if ($slen <= $len) {
return $string;
}
if ($wordsafe) {
$end = $len;
while (($string[--$len] != ' ') && ($len > 0)) {};
if ($len == 0) {
$len = $end;
}
}
if ((ord($string[$len]) < 0x80) || (ord($string[$len]) >= 0xC0)) {
return substr($string, 0, $len) . ($dots ? '...' : '');
}
while (--$len >= 0 && ord($string[$len]) >= 0x80 && ord($string[$len]) < 0xC0) {};
return substr($string, 0, $len) . ($dots ? '...' : '');
}



然后修改smarty_modifier_truncate :
引用:

function smarty_modifier_truncate($string, $length = 80, $etc = '...',
$break_words = false)
{
$s=truncate_utf8_($string,$length,$break_words,FALSE);
return $s.$etc;

/*
if ($length == 0)
return '';
if (strlen($string) > $length) {
$length -= strlen($etc);
return __SubStrCn($string, 0, $length).$etc;
} else
return $string;*/
}



这样就可以解决断句出现乱码的问题smile
Tags: , ,
[本日志最后由1于2007-11-09 18:14编辑]
引用通告地址:
GB2312 http://blog.ashongsoft.com/trackback.php?id=22&encode=gb2312
UTF-8    http://blog.ashongsoft.com/trackback.php?id=22&encode=utf-8
Big5       http://blog.ashongsoft.com/trackback.php?id=22&encode=big5
guest
[2008-04-16 10:20:22 AM ]
你 好 啊 博 主!你的博客真的很不错... . . ..
guest
[2008-04-22 21:22:19 PM ]
你 好 啊 博 主!你的博客真的很不错... . . ..
发表评论

表情
smile cool lol laugh
sad cry playfull sweat
crazy redface what shocked
sex heart gift rose
ok shakehand yes no
使用 UBB 代码
自动转化URL
隐藏
*请输入验证码  
插入粗体文本 插入斜体文本 插入下划线 居中对齐 插入超级链接 插入邮件地址 插入图像 插入 flash 插入Media player文件,如MP3 WMA WMV ASF等 插入RealOne Player文件,如rm等 插入代码 插入引用 插入列表