用String-Multibyte改进Movable Type的中文截断

引用通告(0) 评论(17)

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 );前加上

use String::Multibyte;
my $utf8 = String::Multibyte->new('UTF8');

随后将需要的substrlength函数换为$utf8->substr和$utf8->length。

Update! 2005.9.29

为了让 trim_to 参数正常,请打开 \lib\MT\Template\ 下的 Context.pm 文件,在 use MT::ErrorHandler; 前加上上述内容,然后将

            if (my $len = $local_args{trim_to}) {
                $str = substr $str, 0, $len if $len < length($str);
            } 

改为

            if (my $len = $local_args{trim_to}) {
                $str = $utf8->substr($str, 0, $len) if $len < $utf8->length($str);
            }

据sah测时,目前只对采用静态方式的归档有作用

引用通告(0)

被引用的日记: 用String-Multibyte改进Movable Type的中文截断

TrackBack URL for this entry: http://www.thinkjam.org/loveblog/tjtb.cgi/194.
如果您想引用这篇日记到您的Blog,
请复制上面的链接,放置到您发表文章时的相应界面中。

评论(17)

謝謝!這篇讓我受教良多,一直在找這個解決方法啊。

不過,最后一步“将需要的$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模块

没有找到$substr和$length,倒是找到不少没有带$的substr和length,是否替换成$utf8->substr和$utf8->length?带不带$?盼回复,谢谢

不会啊,怎么会没有呢?这些是截断字符和判断字符长度的函数啊

也许是我理解的不对?
在CMS.pm中确实没有$substr和$length只有substr和length
在Trackback.pm中倒是可以找到
是MT3.2

汗……才发现是自己描述错误,是没有$符号,前阵子晕了:(,替换就可以

我又来了,先谢谢平生一笑的耐心解答
不过还有个问题,Trackback.pm中的$substr和$length是否也改成$utf8->substr和$utf8->length或者不管他?

呵呵,别嫌我烦哈,我是做数据挖掘的,这玩意搞不定。

Trackback.pm没有$substr和$length,但也有不带美元符号的substr和length,改这些就成。

发表评论

最新发布

世界地球日
猛然间看到Google换了Logo,肯定是有什么大日子发生。果然,今天是一年…
Google提供域名Whois信息查询服务
昨天在DRL看到有坛友发此信息,追究起来,出处应该还是GSeeker,正好这…
入吾彀中
【解释】:彀:张满弓弩;彀中:指箭能射及的范围,比喻牢笼,圈套。进入了我的弓箭射…