wordpress路径包含中文乱码404找不到内容解决办法

  WordPress重写路径中包含中文时会提示找不到内容,重写路径中的中文显示乱码解决办法。

  最近在window系统配置WordPress,发现如果postname包含中文时,会提示找不到内容的错误,英文的postname则没有问题。

  环境:window2003+fastcgi,网站编码utf-8。

  经过调试再读取数据文件wp-includes\query.php中echo输出post_name为乱码,经过sanitize_title_for_query函数处理后变空字符,所以导致无法读取数据库。

		if ( '' != $q['name'] ) {//这行大概2573
		    echo $q['name'];//乱码
			$q['name'] = sanitize_title_for_query( $q['name'] );
			
		    echo $q['name'];//乱码经上面一处理变为空了。
			$where .= " AND $wpdb->posts.post_name = '" . $q['name'] . "'";//////////////////////////////
			
		}

  对比数据库中posts表的post_name发现存储的是中文utf-8编码,看来WordPress对中文的url路径支持不是很好。要解决这个问题,可以修改wp-includes\class-wp.php这个文件大概275,行,将$perma_query_vars数组中的中文内容编码一下。

			//elseif ( isset( $perma_query_vars[$wpvar] ) )
			//	$this->query_vars[$wpvar] =$perma_query_vars[$wpvar];
			elseif ( isset( $perma_query_vars[$wpvar] ) )///////////////utf-8 encode
				$this->query_vars[$wpvar] =urlencode(mb_convert_encoding($perma_query_vars[$wpvar], 'utf-8', 'gb2312')) ;

  wp-includes\class-wp.php这个文件的存储编码为ansi,默认使用gb2312进行编码解码,网上说将php文件存储为utf-8编码文件,经测试urlencode是按照utf-8编码了,但是232行的parse_str($query, $perma_query_vars);会将中文编码%e4%b8%ad%e6%96%87%e6%b5%8b%e8%af%95还原为中文内容,导致post_name为中文,wp-includes\class-wp.php这个文件经过sanitize_title_for_query又给去掉了。

 

  所以如果你的WordPress地址重写包含中文时,如果wp-includes\class-wp.php这个文件的存储编码为ansi,需要使用下面的内容将原中文编码为对应utf-8编码。

			//elseif ( isset( $perma_query_vars[$wpvar] ) )
			//	$this->query_vars[$wpvar] =$perma_query_vars[$wpvar];
			elseif ( isset( $perma_query_vars[$wpvar] ) )///////////////utf-8 encode
				$this->query_vars[$wpvar] =urlencode(mb_convert_encoding($perma_query_vars[$wpvar], 'utf-8', 'gb2312')) ;

 

  所以如果你的WordPress地址重写包含中文时,如果wp-includes\class-wp.php这个文件的存储编码为utf-8,直接urlencode编码下。

			//elseif ( isset( $perma_query_vars[$wpvar] ) )
			//	$this->query_vars[$wpvar] =$perma_query_vars[$wpvar];
			elseif ( isset( $perma_query_vars[$wpvar] ) )///////////////utf-8 encode
				$this->query_vars[$wpvar] =urlencode($perma_query_vars[$wpvar]);

 


原创文章,转载请注明出处:wordpress路径包含中文乱码404找不到内容解决办法

评论(0)Web开发网
阅读(212)喜欢(0)不喜欢(0)PHP/apache/Perl