【转贴】用String-Multibyte改进Movable Type的中文截断

转自 平生一笑@thinkjam
原文出处 http://www.thinkjam.org/zoptuno/archives/2005/09/stringmultibyte.html

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

随后将需要的$substr和$length函数换为$utf8->substr和$utf8->length。
在vim中,替换可以这样来做 :1,$s/substr(/$utf8->substr(/g

:1,$s/length(/$utf8->length(/g

2 Comments

看不懂!呵呵!
10.1有什么活动啊!
我是一直有上班,没有办法!不过瞎子、邹志军、小建、还有李国辉都过来了!
昨天晚上打牌喝酒,挺高兴的!

没啥活动,就是和方别、精别、罗涛、张蓉等出来聚聚

本来想到广州来的,看有些人还要上班,就算了

Leave a comment

Recent Entries

  • How to remove a VMHost from SCVMM 2008 R2 forcefully

    这几天碰到个问题,有个服务器原来安装的是 2008 Server Core系统,上面跑 Hyper-V,已经将其导入 SCVMM 2008 R2 来管理。最近实在是嫌 Server Core 管理太不方便,于是想把系统换成带图形界面的,也没在 SCVMM 里面把主机删除,直接就重装了,IP和计算机名什么的都没变,结果问题来了,再打开 SCVMM 的控制台,发现这台主机联系不上(当然,因为重装的没有了 Agent),就想删掉再重加,结果删除过程报错:Error (801) VMM cannot find ISO object . Recommended...

  • Outlook Mobile Update

    现在你可通过新的Microsoft Office Outlook Mobile更新程序和 Microsoft Exchange Server 2010 来保证你手上的信息是最有价值的。 这次的 Outlook Mobile 更新仅针对 Windows Mobile 6.1 的手机。 当你的手机连接到 Exchange Server 2010 时,如果有适合的更新你会收到自动的提示。 如果你的手机的系统是 Windows Mobile...

  • 哥们,我的更新汇总在哪呢?

    我刚刚在我全新的 Exchange 2010 服务器上安装了更新汇总1 - RU1, 然后运行 Get-Exchangeserver -Identity MyExchangeServer (译者: 可以用 Get-Exchangeserver -Identity MyExchangeServer | fl ExchangeVersion, AdminDisplayVersion)得到以下关于AdminsDisplayVersion 和 ExchangeVersion 的版本信息: 嗯, 这看上去有点眼熟(译者:...

  • Exchange 2010 Update Rollup 2

    Today Microsoft released Update Rollup 2 for Microsoft Exchange Server 2010. RU2 comes 3 months after the release of RU1. The list of included fixes...

  • HMC 4.0 Update Rollup 3 has been updated

    Description of Update Rollup 3 for Hosted Messaging and Collaboration 4.0http://support.microsoft.com/kb/979702/en-usMicrosoft released an update rollup that is dated December 2009. This update fixes issues that...

Close