Php Codeigniter重定向--您提交的URI包含不允许的字符

Php Codeigniter重定向--您提交的URI包含不允许的字符,php,codeigniter,Php,Codeigniter,当我尝试重定向到其他网站时,我收到以下错误: 遇到一个PHP错误 严重性:警告 消息:解析url(/%22**)[函数.解析url]:无法解析url 文件名:core/URI.php 行号:219 遇到错误 您提交的URI包含不允许的字符 这是我在URI.php中的所有代码 private function _detect_uri() { if ( ! isset($_SERVER['REQUEST_URI']) OR ! isset($_SERVER['SCRIPT_NAME'])

当我尝试重定向到其他网站时,我收到以下错误:

遇到一个PHP错误

严重性:警告

消息:解析url(/%22**)[函数.解析url]:无法解析url

文件名:core/URI.php

行号:219


遇到错误

您提交的URI包含不允许的字符


这是我在URI.php中的所有代码

private function _detect_uri()
{
    if ( ! isset($_SERVER['REQUEST_URI']) OR ! isset($_SERVER['SCRIPT_NAME']))
    {
        return '';
    }

    $uri = $_SERVER['REQUEST_URI'];
    if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0)
    {
        $uri = substr($uri, strlen($_SERVER['SCRIPT_NAME']));
    }
    elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0)
    {
        $uri = substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME'])));
    }

    // This section ensures that even on servers that require the URI to be in the query string (Nginx) a correct
    // URI is found, and also fixes the QUERY_STRING server var and $_GET array.
    if (strncmp($uri, '?/', 2) === 0)
    {
        $uri = substr($uri, 2);
    }
    $parts = preg_split('#\?#i', $uri, 2);
    $uri = $parts[0];
    if (isset($parts[1]))
    {
        $_SERVER['QUERY_STRING'] = $parts[1];
        parse_str($_SERVER['QUERY_STRING'], $_GET);
    }
    else
    {
        $_SERVER['QUERY_STRING'] = '';
        $_GET = array();
    }

    if ($uri == '/' || empty($uri))
    {
        return '/';
    }

    $uri = parse_url($uri, PHP_URL_PATH);

    // Do some final cleaning of the URI and return it
    return str_replace(array('//', '../'), '/', trim($uri, '/'));
}

在您的
应用程序/config/config.php
更改中,尝试此操作可能会有所帮助,但不建议使用

$config['permitted_uri_chars']  = ''; #keep it blank to allow all characters
$config['allow_get_array']       = TRUE;
$config['enable_query_strings'] = TRUE;

CodeIgniter检查所有
URI
段是否存在不允许的字符。这是通过白色列出允许的字符来实现的。可以在
$config['allowed\u uri\u chars']
变量中的
/system/application/config/config.php
中检查哪些是允许的
allowed\u uri\u chars
是CodeIgniter在uri中接受的字符。默认值设置为类似的值

$config['permitted_uri_chars'] = 'a-z 0-9~%.:&_\-'; 
默认情况下,只允许以下项:
a-z 0-9~%。:\u0-

留空以允许所有字符,但仅当您精神错乱时


%22
用于
。您可以将其添加到
允许的\u uri\u chars
列表中。

在我的情况下,它是一个格式错误的URL

这就像
mydomain/route¶m=1

请注意,它应该在第一个参数处具有询问字符,而不是“&”。 所以它应该是这样的:
mydomain/route?param=1&other=2&other=3

正是它所说的-您是否尝试过在CI源代码中搜索该错误消息,并按照它的路径找到检查这些字符的正则表达式?我打赌更改正则表达式将解决问题…这甚至不应该是一个选项,我认为这对som来说是一个糟糕的教育ebody是php新手,或者不懂安全性。是否可以在每个方法的基础上设置它?意思是,我希望允许@for提交电子邮件地址,但只在类的一个方法中。我希望在其他任何地方都不允许它,而无需在每个情况下检查它。