web-dev-qa-db-fra.com

Codeigniter Redirect - L'URI que vous avez soumis contient des caractères non autorisés

Lorsque j'essaie de rediriger vers un autre site Web, je reçois cette erreur:

Une erreur PHP a été rencontrée

Gravité: avertissement

Message: parse_url (/% 22 * ​​ * ) [function.parse-url]: impossible d'analyser l'URL

Nom de fichier: core/URI.php

Numéro de ligne: 219


Une erreur est survenue

L'URI que vous avez soumis contient des caractères non autorisés.


C'est tout le code que j'ai dans 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, '/'));
}
15
subrui

CodeIgniter recherche dans tous les segments URI les caractères non autorisés. Cela se produit par une liste blanche des caractères autorisés. Ceux qui sont autorisés peuvent être cochés dans /system/application/config/config.php dans la variable $config['permitted_uri_chars']. permitted_uri_chars sont les caractères que CodeIgniter accepte dans votre URI. La valeur par défaut est définie sur quelque chose comme.

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

Par défaut, seuls ceux-ci sont autorisés: a-z 0-9~%.:_-

Laissez ce champ vide pour autoriser tous les personnages, mais uniquement si vous êtes fou. 

%22 vient pour ".Vous pouvez ajouter ceci dans la liste permitted_uri_chars.

48
Suvash sarker

Essayez ceci peut aider mais est not recommended, dans votre changement 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;
4
Nil'z

La solution ci-dessus est parfaite, sauf que la deuxième ligne ($config['allow_get_array'] = TRUE;); n’existe pas. En passant, j'utilise le système de blog Open-Blog.info et j'ai rencontré ce problème lorsque j'ai essayé d'ouvrir la page de l'administrateur.

0
Zascos