Alex的博客

本博客的文章均为原创,是本人从事行业多年来所遇见一些小问题的解决心得,希望可以帮助到大家!



CI框架解决无法传递特殊字符

默认CI框架url中只允许传递a-z 0-9~%.:_\-  比如你要传递+那么这是不被允许的,会报:The URI you submitted has disallowed characters.

ascii字符也是不被允许的.那么需要怎么解决呢?

解决传递+问题.

编辑config.php

找到

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-'; 

改成

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\+';

这样就能传递+了.但是这样做不知道会不会降低安全性.

解决传递ascii字符

在application/core下创建MY_URI.php文件

然后在问加中写入:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class MY_URI extends CI_URI {

	/**
	 * 自定义的url过滤函数
	 *
	 * @access	private
	 * @param	string
	 * @return	string
	 */
    function _filter_uri($str)
    {
        if ($str != '' AND $this->config->item('permitted_uri_chars') != '')
        {
            $str = urlencode($str);
            if ( ! preg_match("|^[".preg_quote($this->config->item('permitted_uri_chars'))."]+$|i", $str))
            {
                exit('The URI you submitted has disallowed characters.');
            }
            $str = urldecode($str);
        }
        return $str;
    }  
}


这样url中就能传递ascii字符了.

原理是覆盖掉ci默认的_filter_uri方法来支持ascii字符


浏览693  评论0  Alex于 2015-12-11 13:14
发言