波斯马BOSSMA Information Technology

IIS下使用wordpress中文tag永久链接插件

发布时间:2010年12月14日 / 分类:PHP, WordPress / 49,974 次浏览 / 评论

在IIS下使用WordPress的永久链接,可以采用一个免费的ISAPI组件:WordPress URL Rewrite。只要指定需要Rewrite的目录,不需要再编写Rewrite规则。

关于这个ISAPI的使用请参考:
http://www.asgone.net/wordpress-url-rewrite-instead-of-404/
http://www.steveluo.name/wordpress-url-rewrite-isapi_rewrite/
我没有使用上边文章中提到的:ISAPI_Rewrite。

因为IIS下中文编码的问题,中文tag的永久链接发生404错误,一些朋友提供了修改代码进行转码的方法。

参考那些解决方案,我写了一个插件,以避免对wordpress核心程序的修改,方便以后升级及迁移。

点击这里下载

已经支持WordPress 3.1,感谢“旷达博客”的提醒,请更新插件。

代码很简单,只有两个函数。

<?php
/*
Plugin Name: IIS Chinese Tag Permalink
Plugin URI: https://blog.bossma.cn/in-iis-wordpress-chinese-tag-permalinks-plugin/
Description: in iis for wordpress chinese tag permalinks
Author: BOSSMA.CN
Author URI: https://blog.bossma.cn/
Version: 1.2
*/
add_action('init', 'bossma_get_urf8_pathandurl');
add_filter('get_pagenum_link','bossma_set_utf8_pagenumlink');
add_action('parse_query','bossma_chinese_tag_encode');

//iis encoding the url with GBK,but wordpress with utf-8
function bossma_get_urf8_pathandurl() {
	$_SERVER['PATH_INFO']=iconv("GBK","UTF-8",$_SERVER['PATH_INFO']);
	$_SERVER['REQUEST_URI']=iconv("GBK","UTF-8",$_SERVER['REQUEST_URI']);
}

//urlencode for chinese tag
//sometimes preg_match can not match the chinese correctly
function bossma_chinese_tag_encode($query){
	if(isset($is_tag)&&$is_tag){
		if($query->query_vars['tag']!=''){
			$query->query_vars['tag']=urlencode($query->query_vars['tag']);
		}
	}
}

//for generate tag pagenum link
//use utf8 encode
function bossma_set_utf8_pagenumlink($result){
	$tag_index=stripos($result,"/tag/");
	$link_len=strlen($result);
	if($tag_index!==false){
		$link_base=substr($result,0,$tag_index);
		$page_index=strripos($result,"/page/");
		if($page_index!==false){
			$tag_str=substr($result,$tag_index+5,$page_index-$tag_index-5);
			$result=$link_base."/tag/".rawurlencode($tag_str).substr($result,$page_index);
		}else{
			$tag_str=substr($result,$tag_index+5);
			$result=$link_base."/tag/".rawurlencode($tag_str)."/";
		}

	}
	return $result;
}
?>

这样就可以解决大部分的中文tag问题,但是仍旧有一些中文tag不能正确识别。

通过跟踪SQL语句,发现tag被转换成了其它的字符串,比如“mysql乱码”转成了“mysqlac”。

我尝试使用了多种转码方法,iconv、mb_convert_encoding,还有phpe.net作者以前写过的一个encoding类,均不能解决,

所以怀疑是IIS编码或者WordPress解析出了问题。

2010-12-17:部分中文不能解析的问题已经解决,原因是wordpress中preg_match匹配中文出错。

如果你有什么问题,欢迎留言。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《IIS下使用wordpress中文tag永久链接插件

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

目前有22 条评论

  1. LINN 30楼:

    正在解压缩安装包…

    存档不兼容。 PCLZIP_ERR_BAD_FORMAT (-10) : Invalid archive structure

    服务器装了WordPress URL Rewrite,中文tag有问题,使用了您这个插件,安装时出现这个错误,请教下,该怎么处理。

发表评论