bbPress 中文 Tag 问题的解决

bbPress 是 WordPress 创始人 Matt 设计的轻量级论坛程序。这个论坛以其轻巧,高效以及非常容易可以和 Wordpress 集成,自从推出便深受喜爱,越来越多的被使用。但对于中文用户它一直有一个恼人的“顽疾”,就是无法良好的支持多字节 Tag。最近我在开发一个应用时需要用到 bbPress,今天花了一些时间解决了这个问题。
直接说解决方案,前两个修改之处来自 Blogbeta 的热心网友以及 bbPress 中文论坛:
第一处:bb-includes/formatting-functions.php 中函数 sanitize_with_dashes 修改为:
- <?php
- function sanitize_with_dashes( $text ) {
- $text = strip_tags($text);
- $text = remove_accents($text);
- $text = strtolower($text);
- $text = preg_replace('/&(^x80-xff)+?;/', '', $text); // kill entities
- $text = preg_replace('/[^a-z0-9\x80-\xff _-]/', '', $text);
- $text = preg_replace('/s+/', '-', $text);
- $text = preg_replace(array('|-+|', '|_+|'), array('-', '_'), $text); // Kill the repeats
- return $text;
- }
- ?>
第二处:bb-includes/gettext.php 112 行改为:
- <?php
- if ($magic == ($MAGIC1 & 0xFFFFFFFF) ||$magic==$MAGIC1) { // to make sure it works for 64-bit platforms
- ?>
后面这两处是我自己修改的,现在在 bbs.blogbeta 上已经调试通过,但没有经过大量的测试:
第三处:bb-includes/formatting-functions.php 中函数 tag_sanitize 修改为:
- <?php
- function tag_sanitize( $tag ) {
- $tag = urldecode($tag);
- return sanitize_with_dashes( $tag );
- }
- ?>
第四处:bb-includes/functions.php 中找到
- <?php
- if ( 1 === bb_get_option( 'debug' ) ) :
- echo "<table>\n<tr><td>". __('REQUEST_URI') .":</td><td>";
- var_dump($uri);
- ?>
在前面添加这样一行:
- <?php
- if (is_tag()) {
- $check = str_replace($tag->tag,urlencode($tag->tag),$check);
- }
- ?>
修改完成后测试,已经可以正常添加和删除中文 Tag,并可以根据中文 Tag 查询。
原文链接**:花儿开了 - bbPress 中文 Tag 问题的解决
** 本博客文章全部原创,原则上不欢迎全文转载,如需转载(包括部分转载,使用文章图片等)请务必标注原文链接!同时,本博文章不欢迎任何形式的派生及篡改,如需引用,请使用引用通告(Trackback) - http://blog.istef.info/2007/02/03/bugfix-of-bb.../trackback/。商业网站使用请务必先取得作者授权!

赞一下,bbPress不支持中文tag的确阻止了许多使用者。
是否考虑提供一个diff文件或者给bbPress官方申请打一个patch呢?
我用的是 0.8的版本,它不支持中文tag,点选中文字的tag会一直loading页面,
所以我按照上面的方法修改了文件,可是所有中文的tag链接都变成这样的链接url了,点选之后全没链接上相关的文章啊。
myblogexample.com/bbpress/tags.php?tag=
tags.php?tag=(之后没有任何代号了)
@wenkong: 这种方法只适合 0.8 以下的版本,0.8 及其以上的版本已经支持中文 tag 不需要修改了
iStef, 我安装最新的0.8.1版本,可是点选了中文tag链接不上,是有可能什么原因造成呢?
@wenkong: 你在 config.php 中添加 $bb->debug = true; 看一下输出信息,固定链接应该是一致的才对。