Codeigniter支持UTF8(中文/日文等)URI的简单办法

Published at 8 months ago

目前我使用的是Codeigniter 1.7.2版,其URI路由不支持中文等UTF8编码,原因是其直接把URI进行正则匹配,而没有先进行URL编码。 解决方法很简单,就是URI在正则匹配之前进行URL编码即可。 有两种方法,一种是直接修改Codeigniter的libraries的URI.php中的:(约在191行)

if ( ! preg_match("|^[".str_replace(array('\\-', '\-'), '-', preg_quote($this->config->item('permitted_uri_chars'), '-'))."]+$|i", $str))

改为: if ( ! preg_match("|^[".str_replace(array('\\-', '\-'), '-', preg_quote($this->config->item('permitted_uri_chars'), '-'))."]+$|i", urlencode($str)))

另外一种方法就是扩张URI类,防止今后升级Codeigniter时被覆盖代码,具体方法如下:

在application/libraries/下新建MY_URI.php,内容只需复制_filter_uri($str)函数即可,并在复制后把

if ( ! preg_match("|^[".str_replace(array('\\-', '\-'), '-', preg_quote($this->config->item('permitted_uri_chars'), '-'))."]+$|i", $str))

改为:

if ( ! preg_match("|^[".str_replace(array('\\-', '\-'), '-', preg_quote($this->config->item('permitted_uri_chars'), '-'))."]+$|i", urlencode($str)))

#PHP

@http://zfben.com/blog/Codeigniter支持UTF8(中文/日文等)URI的简单办法