Wenn ich versuche, auf eine andere Website umzuleiten, erhalte ich folgende Fehlermeldung:
Es wurde ein Fehler PHP festgestellt
Schweregrad: Warnung
Nachricht: parse_url (/% 22 * * ) [function.parse-url]: URL kann nicht analysiert werden
Dateiname: core/URI.php
Zeilennummer: 219
Ein Fehler ist aufgetreten
Die von Ihnen angegebene URI hat ungültige Zeichen.
Dies ist der gesamte Code, den ich in URI.php habe
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, '/'));
}
CodeIgniter überprüft alle URI
-Segmente auf nicht zulässige Zeichen. Dies geschieht durch weiße Auflistung der zulässigen Zeichen. Welche zulässig sind, kann in /system/application/config/config.php
in der $config['permitted_uri_chars']
-Variablen geprüft werden. permitted_uri_chars
sind die Zeichen, die CodeIgniter in Ihrem URI akzeptiert. Der Standardwert ist in etwa so eingestellt.
$config['permitted_uri_chars'] = 'a-z 0-9~%.:&_\-';
Standardmäßig sind nur diese zulässig: a-z 0-9~%.:_-
Lassen Sie das Feld leer, um alle Zeichen zuzulassen - aber nur, wenn Sie verrückt sind.
%22
kommt für "
. Sie können dies in permitted_uri_chars
-Liste hinzufügen.
Versuchen Sie, dies kann helfen, ist aber not recommended
in Ihrer application/config/config.php
-Änderung:
$config['permitted_uri_chars'] = ''; #keep it blank to allow all characters
$config['allow_get_array'] = TRUE;
$config['enable_query_strings'] = TRUE;
Die obige Lösung ist perfekt, außer dass die zweite Zeile ($config['allow_get_array'] = TRUE;);
nicht existiert. Übrigens benutze ich das Blogsystem Open-Blog.info, und ich habe dieses Problem angetroffen, als ich die Seite des Administrators geöffnet habe.