修正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;*/
}
这样就可以解决断句出现乱码的问题
重新写一个函数如下:
引用:
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;*/
}
这样就可以解决断句出现乱码的问题
[本日志最后由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
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
[2008-04-16 10:20:22 AM ]
你 好 啊 博 主!你的博客真的很不错... . . ..
你 好 啊 博 主!你的博客真的很不错... . . ..