用String-Multibyte改进Movable Type的中文截断
Movable Type对中文的支持不错,但就是有个老毛病,就是在截断过长的中文时(如接收到的引用通告摘要),出现乱码。这虽不影响正常的使用,但看着就是不爽,更不要说还会影响网页的SEO了。
怎么解决呢?那就是Perl的String-Multibyte模块。
你可以采用两种方法安装此模块。一种是作为系统模块,在命令行下输入“ppm install String-Multibyte”;另一种是从这里下载String-Multibyte模块解压缩后,将Multibyte.pm文件和Multibyte目录上传到MT安装目录的extlib\String(没有String目录的话,请自行创建)目录下。
安装好模块后,就可以在MT程序中调用。对我们而言,主要是修改两个文件,即\lib\MT\App下的CMS.pm和Trackback.pm。
打开这两个文件,在@MT::App::Trackback::ISA = qw( MT::App );前加上
bc[perl].. use String::Multibyte;
my $utf8 = String::Multibyte->new('UTF8');
p. 随后将需要的substr和length函数换为$utf8->substr和$utf8->length。
p. Update! 2005.9.29
为了让 trim_to 参数正常,请打开 \lib\MT\Template\ 下的 Context.pm 文件,在 use MT::ErrorHandler; 前加上上述内容,然后将
bc[perl].. if (my $len = $local_args{trim_to}) {
$str = substr $str, 0, $len if $len < length($str);
}
p. 改为
bc[perl].. if (my $len = $local_args{trim_to}) {
$str = $utf8->substr($str, 0, $len) if $len < $utf8->length($str);
}
p.. 据sah测时,目前只对采用静态方式的归档有作用。
Danny
謝謝!這篇讓我受教良多,一直在找這個解決方法啊。
不過,最后一步“将需要的$substr和$length函数换为$utf8->substr和$utf8->length”,這個……呃,是怎么實現的???
平生1笑就是焉老虎吗?-_-!
平生一笑
搜索替换即可,都替换也可以
从99年开始,我主持蔫老虎正传的网络门诊和蔫老虎推荐部分
真的
问题一定会出现吗
真的
还是说。
只要有的时候也不会出问题。
平生一笑
有的时候会出问题
真的
如果你在评论的时候,用了。然后回车,就会出现/r,或者/n
和这个有关系吗?
平生一笑
无关
真的
能说说出现这种情况的原因吗?在论坛问了就是没回音。
平生一笑
这个倒不清楚,我这里一直没有问题
随心所欲
平生一笑,你好!
我安装的是3.2版的,但是我在CMS.pm文件里面并没有搜索到
@MT::App::Trackback::ISA = qw( MT::App );
因为那个文件太大了,我用的搜索。
能帮帮我吗?MSN:dcdcn@msn.com
论坛帐号fxincom,但是我不能发表新帖:(
平生一笑
不能发帖应该是你没有进行邮件验证,我给你手工激活账号再说吧!
那个@MT::App::Trackback::ISA = qw( MT::App );在文件的开头部分,你把需要添加的内容跟文件中那些use xxx的放在一起就行了,意思就是调用String-Multibyte模块
Niky
没有找到$substr和$length,倒是找到不少没有带$的substr和length,是否替换成$utf8->substr和$utf8->length?带不带$?盼回复,谢谢
平生一笑
不会啊,怎么会没有呢?这些是截断字符和判断字符长度的函数啊
Niky
也许是我理解的不对?
在CMS.pm中确实没有$substr和$length只有substr和length
在Trackback.pm中倒是可以找到
是MT3.2
平生一笑
汗……才发现是自己描述错误,是没有$符号,前阵子晕了:(,替换就可以
Niky
我又来了,先谢谢平生一笑的耐心解答
不过还有个问题,Trackback.pm中的$substr和$length是否也改成$utf8->substr和$utf8->length或者不管他?
呵呵,别嫌我烦哈,我是做数据挖掘的,这玩意搞不定。
平生一笑
Trackback.pm没有$substr和$length,但也有不带美元符号的substr和length,改这些就成。