【转贴】用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

  • Lync Server 2010 发布架构报错

    昨天想试试在现有的 OCS 2007 R2 的基础上部署 Lync Server 2010 试试看,装好 Topology Builder 之后,新建了一个拓扑,然后把该填的都填了,发布的时候老是报SQL错,很是郁闷,后来终于在log中找到了错误原因:  Script result: ERROR_VALIDATE_BAD_SQL_VERSION Error: Script failed (code "ERROR_VALIDATE_BAD_SQL_VERSION") when installing "CentralMgmtStore" on "LyncServer01.mail2any.local"....

  • 使用 URL Rewrite 重定向 Http 请求至 Https

    公司部署了个新的 IIS 站点,需要强制在 Https 下面访问,但是又不希望关掉80端口的 Http 请求,这样对用户体验来讲不好,最好是能强制所有的 Http 请求都会被重定向到 Https 上面去,显然, IIS 自带的 "HTTP Redirect" 已经不能满足这个需求,我们这里使用 IIS 7.0 下面的重定向扩展 URL Rewrite Module 来做。1. http://www.iis.net/download/URLRewrite 到这里下载,有分...

  • How to remember your OC and Outlook password

    How to make your computer remember your Microsoft Communicator 2007 R2 and Outlook 2007 password (如何让你的电脑在非域环境中记住 OC 2007 R2 和 Outlook 的密码)我们知道,在域的环境中,使用 OC 和 Outlook...

  • 微软 CRM 2011 Beta 快速安装图解

    微软在9月17日在网站上放出了 CRM 2011 (也就是CRM5.0)的 beta 版本,我就先来个简单的快读安装图解,一睹为快,下个月会写点新版 CRM 的使用感受。 下载: Microsoft Dynamics CRM 2011 Beta Microsoft Dynamics CRM 2011 Software Development Kit (SDK)Microsoft Dynamics CRM 2011...

  • 升级到 Exchange 2010 SP1 后出现的2个小问题

    今天有空把所有的 Exchange 服务器从 2010 RTM 升级到了 2010 SP1 了, 升级完了后发现了2个小问题: OWA打开正常,但是点到 ECP 的时候报 403 访问拒绝错误 某台 Exchange 打开 EMS 时报错如下: [server.mydomain.local] Connecting to remote server failed...

Close