让Textpattern的URL支持中文


UPDATE: 其实原本的txp在生成urltitle的部分无非是想要trim掉空格并把大写字母转化成小写,那么我们似乎大可以不必动用urlencode,更何况urlencode的链接似乎也不那么友好

还是和下面一样,不过要添加的代码是

if (empty ($incoming['url_title'])) {
$incoming['url_title'] = trim ($incoming['Title']);
$incoming['url_title'] = preg_replace ('/s+/', '-', $incoming['url_title']);
$incoming['url_title'] = strtolower ($incoming['url_title']);
}

效果还是见本文

Textpattern的永久链接的中文bug已经是众所周知的事情了,在撰写文章或者保存文章时,如果没有指定url title,那么将根据文章的标题生成url title,最要命的是,这个生成的url title会无视标题中的中文,例如类似 中文chinese 的标题,最终生成的url title则是 chinese 不难想象,如果title全部是中文的话。。。

当然,如果你的永久链接结构包含文章id的话就没什么问题了,或者,每次都能在发表文章前记得指定一个url title

很遗憾,我不是这种人,只好想个一劳永逸的解决办法了—hack一下code

说来很简单,php提供了一个urlencode的函数,对titile调用这个函数然后把结果指定给url title就行了

编辑 textpattern/include/txp_article.php 文件,找到 textile_main_fields 函数(4.0.5版在第925行),在函数末尾

return $incoming;

之前加一段

if (empty ($incoming['url_title'])) {
$incoming['url_title'] = urlencode ($incoming['Title']);
}

即可,效果看看本文的永久链接就知道了

« 另类Linux发行版图片 やっと、終わった »

2 Responses to 让Textpattern的URL支持中文

  • gravatar dimlau at December 4, 2007 12:01pm

    强啊。。。
    其实修改成像blogger或者movabletype的那种形式就可以了
    把全中文标题的文章url title自动变成“post-id号”形式

  • gravatar wayne at December 4, 2007 8:02pm

    @dimlau: 总觉得post-id这样子不是很友好的说。。。呵呵


Name (*)

Email Address (*)

Web Address