当我尝试重定向到其他网站时,我收到此错误:
遇到PHP错误
严重性:警告
消息:parse_url(/%22 * * )[function.parse-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, '/'));
}
答案 0 :(得分:48)
CodeIgniter会检查所有URI
段是否包含不允许的字符。这通过白名单允许的字符来实现。可以在/system/application/config/config.php
变量的$config['permitted_uri_chars']
中查看允许的内容。 permitted_uri_chars
是CodeIgniter在您的URI中接受的字符。默认值设置为类似。
$config['permitted_uri_chars'] = 'a-z 0-9~%.:&_\-';
默认情况下,只允许这些:a-z 0-9~%.:_-
留空以允许所有角色 - 但前提是你疯了。
%22
来自"
。您可以在permitted_uri_chars
列表中添加此内容。
答案 1 :(得分:4)
尝试此操作可能有所帮助,但not recommended
更改为application/config/config.php
:
$config['permitted_uri_chars'] = ''; #keep it blank to allow all characters
$config['allow_get_array'] = TRUE;
$config['enable_query_strings'] = TRUE;
答案 2 :(得分:0)
上述解决方案是完美的,但第二行($config['allow_get_array'] = TRUE;);
不存在。顺便说一句,我正在使用Open-Blog.info博客系统,当我尝试打开管理员页面时,我遇到了这个问题。
答案 3 :(得分:0)
在我的情况下,这是格式错误的URL。
就像mydomain/route¶m=1
请注意,它应该在第一个参数中包含一个询问字符,而不是“&”。
所以应该是这样的:
mydomain/route?param=1&other=2&another=3