Blog

困扰已久的 MT5 的 bug 解决了

mt5-icon自从 Movable Type 5 的测试版本发布以来,我就一直希望可以用在自己的 blog 上。MT5 有一些新功能,不过我最喜欢的一点是它后台的编辑器不错。用 MT4 的后台编辑器来编辑中文简直侮辱了汉字的美感。当时费了很大的力气才把后台中文字体给整治的可以入眼,并写文记之

但当我把这个 blog 的所有文章从 MT4 导出再在 MT5 中导入后,重新发布站点时,MT5 会报告 “Wide character in subroutine entry” 错误。这个问题困扰了我很长时间,从 RC1RC3 版本都一直存在。本来我想这么重大的问题到了正式版应该就没了吧,于是我那几天就天天盼望着正式版的发布,结果却又一次让我失望了。这让我迟迟无法升级到 MT5,也让我对 MT5 正式版发布跳票又没有解决问题的 6A 非常不满。

我估计 6A 不会主动修正这个问题了,也许是他们根本没有意识到这个问题,我于是就在官方的论坛上发布了一个帖子。然后 6A 的 Beau Smith 和我一起测试了几种情况,但一直也没有找到产生问题的原因,到最后也就不了了之了。后来我看到网上的一些其它的中文 MT 用户都升级了,也没有发生我的问题,就推测应该是 Markdown 的问题。后来通过 debug mode 也证实了问题出自 Markdown。但 Markdown 在 MT5 和 MT4 中几乎没有差别,在 MT4 中用着好好的,到了 MT5 中就有问题,所以我觉得应该是 MT 自身有了变动,我也无计可施。

前几个月实在太忙,也没有写 blog 的心情,于是这里就荒废了 4 个月。昨天突然觉得很久没有去 MT 的官方网站上看看了,于是就看到了 MT 5.02 版本发布的消息。我一直不甘心用不上 MT5,就又安装了一次,结果问题依旧。这次我有些时间,于是就发狠手动测试了一下。因为在发布失败后,我看到系统其实是生成了一些文章的,所以我猜应该是我中间有哪一篇文章里有些非法字符导致了这个问题,就想试着把它找出来。我每格大约 20 篇文章就发布一次这个文章,结果大概找到了那个临界点。但看了半天也没有找出问题所在。

然后我想时间隔了那么久,中间不应该只有我一个人使用 Markdown 并遇到这种问题吧,于是就再次去 Google 搜索了一下。似乎现在用 MT 并同时使用 Markdown 的人真得不多了,我上次搜索一个结果都没有,这次找到了两个。我先看的一个是一篇日文文章。我看不懂日文,但根据文章中穿插的英文,我猜测估计是和我同样的问题。描述解决方案的日文不难,“冒頭部分に”、“追加”、“に書き換える”我大体能猜出什么意思。按照他的方法试了一次,果然整个站点毫无问题的发布成功了。再看我搜索到的第二条结果,竟然是在 MT 的官方论坛上的一个帖子,里面竟然引用了我之前发的那个帖子,说他遇到了同样的问题,并通过以下方法解决了。我看了一下他给的方法,竟然和那篇日文文章里的方法一模一样。可惜这个帖子的作者没有在我那个帖子里说一句,所以我一直也没有看到。这个帖子是在今年年初发布的,但似乎一直没有人关注,所以到今天 MT5 还是有这个 bug。我提交了一个 patch,也不知道能不能在下一个版本中改进。

6A 在日本开了分公司,我觉得充分说明了 MT 在日本的流行。其实不止是 MT,Perl 也是一样。我感觉中国程序员更偏爱 PHP,因此 WordPress 在中国基本上完全压过 MT。我在网上很少见到过有 Perl 开发者,似乎人们的精力更多的投入到 Python / PHP / Ruby 上了。相反在日本有很多 Perl 黑客,比如我上一篇文章里提到的给 Cocoa Emacs 23 做全屏补丁的 Daisuke Murase,我在他的 github repo 里看到了很多 Perl 的代码。另外,很多 MT 的资料都是日文的,可惜我看不懂,但 MT 在日本的流行是确定的。

最后我把这个 bug 的解决方案列在这里(假设 MT 安装在 mt5/ 目录里):

  1. mt5/plugins/Markdown/Makrdown.pl 文件的开头部分的 use 区域加上一行 “use Encode qw(encode_utf8);
  2. mt5/plugins/Markdown/Makrdown.pl 文件里找到 “my $key = md5_hex($1);” 一行(280行左右),替换成 “my $key = md5_hex(encode_utf8($1));”。

1 comment

  1. 沙发

Leave a Reply