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)))