解决 Codeigniter 1.7.2 中文 URL 问题

继承 Codeigniter URI 的 URI 类,在 application/libraries/ 下创建 MY_URI.php:

<?php

class MY_URI extends CI_URI {

	/**
	 * Filter segments for malicious characters
	 *
	 * @access	private
	 * @param	string
	 * @return	string
	 */
	function _filter_uri($str)
	{
		if ($str != '' && $this->config->item('permitted_uri_chars') != '' && $this->config->item('enable_query_strings') == FALSE)
		{
			mb_regex_encoding($this->config->item('permitted_uri_chars_encoding'));
			if ( ! mb_eregi("^[".$this->config->item('permitted_uri_chars')."]+$", $str))
			{
				show_error('The URI you submitted has disallowed characters.', 400);
			}
		}

		// Convert programatic characters to entities
		$bad	= array('$', 		'(', 		')',	 	'%28', 		'%29');
		$good	= array('&#36;',	'&#40;',	'&#41;',	'&#40;',	'&#41;');

		return str_replace($bad, $good, $str);
	}

}

修改 config.php 配置:

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\x{2E80}-\x{9fa5}';
$config['permitted_uri_chars_encoding'] = 'utf8';

permitted_uri_chars_encoding 是我新增的,表示 URL 的字符编码。
我整站使用 utf8,所以这里设置 permitted_uri_chars_encoding 为 utf8。

原理?这是什么原理?
不要问我原理,自己去看代码去,哥最近比较忙。

— EOF —

6 thoughts on “解决 Codeigniter 1.7.2 中文 URL 问题”

发表评论

电子邮件地址不会被公开。 必填项已用*标注