用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. 随后将需要的substrlength函数换为$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测时,目前只对采用静态方式的归档有作用