8
votes

Obtenez le paramètre HTTP URL sans décodage automatique à l'aide de PHP

J'ai une URL comme xxx

lorsque je l'écris au fichier xxx

mais j'ai besoin de l'écrire à sans encodage < / p> xxx

Comment puis-je faire?

merci


0 commentaires

3 Réponses :


5
votes

parce que le _ get _ obtenez code> et _ Demande code> Les superglobaux sont automatiquement exécutés à une fonction de décodage (équivalent à urldecode () code>), vous simplement besoin de réaménager (code> urlencode () code> les données pour la faire correspondre aux caractères passés dans la chaîne d'URL:

file_put_contents('x.txt', urlencode($_GET['x'])); // -->hello+world
file_put_contents('y.txt', urlencode($_GET['y'])); // -->%00h%00e%00l%00l%00o


2 commentaires

Ca ne fonctionne pas. Il retourne x -> Hello + World, Y ->% 5C0H% 5C0E% 5C0L% 5C0L% 5C0O


@ user1725661 - alors quelque chose d'autre se passe. Je viens de tester cela et ça marche bien ... Voir ma réponse étendue.



0
votes

Je pense que vous pouvez utiliser urlencode () pour transmettre la valeur dans URL et urldecode () pour obtenir la valeur.


1 commentaires

Ca ne fonctionne pas. Il retourne x -> Hello + World, Y ->% 5C0H% 5C0E% 5C0L% 5C0L% 5C0O



6
votes

Vous pouvez obtenir des valeurs non connectées à partir de la variable $ _server ["Query_string"].

function getNonDecodedParameters() {
  $a = array();
  foreach (explode ("&", $_SERVER["QUERY_STRING"]) as $q) {
    $p = explode ('=', $q, 2);
    $a[$p[0]] = isset ($p[1]) ? $p[1] : '';
  }
  return $a;
}

$input = getNonDecodedParameters();
file_put_contents('x.txt', $input['x']); 


1 commentaires

C'est la bonne réponse, car la ré-codage suggérée par Ben D. traite des caractères (comme des barres obliques) différemment.