2010-04-23 6 views
4

Selon RFC 2396,Est-ce que UrlDecode gère plus (+) correctement?

Le plus "+", dollar "$", et la virgule "" caractères ont été ajoutés à
ceux du "réservé" ensemble, étant donné que ils sont traités comme réservé dans le composant de requête.

En effet, la recherche de ce site pour "plus + virgule, dollar $", et vous obtenez

https://stackoverflow.com/search?q=plus+%2B+comma+,+dollar+

$

Plus est seulement codé (par l'application) quand il est pas utilisé comme délimiteur.

Mais en tant que others have observed, la fonction .12 UrlDecode de .NET convertit plus à l'espace. Où ce comportement est-il spécifié?

Répondre

7

Où ce comportement est-il spécifié?

La spécification HTML, assez curieusement.

UrlDecode est un nom trompeur.

+ ne représente qu'un espace dans application/x-www-form-urlencoded des données comme défini par HTML; c'est-à-dire dans un corps de requête de soumission POST de formulaire ou dans la partie ?query de l'URL. C'est un cas particulier! Ailleurs dans l'URL un plus est juste un plus.

http://www.example.com/path+path/x?query+name=query+value 

Dans cette URL le paramètre est réglé sur query namequery value. Il pourrait être généré en soumettant ce champ de formulaire sous une forme GET:

<input name="query name" value="query value"> 

Cependant, le nom du dossier est littéralement path+path. Pas d'espace. Parce que cela est confus et potentiellement ambigu, la meilleure approche consiste toujours à coder les espaces %20. Vous pouvez le faire dans .NET en utilisant UrlPathEncode. Cela fonctionne aussi bien dans la partie requête de l'URL que dans le chemin.

Questions connexes