Server.UrlEncode ("My File.doc") renvoie "My + File.doc", tandis que l'échappement javascript ("My File.doc") renvoie " Mon% 20Fichier.doc ". D'après ce que je comprends, le javascript est l'URL corectly codant la chaîne alors que la méthode .net n'est pas. Il semble certainement fonctionner de cette façon dans la pratique mettre http://somesite/My+File.doc ne cherchera pas "Mon fichier.doc" dans tous les cas je pourrais tester en utilisant firefox/i.e. et IIS, alors que http://somesite/My%20File.doc fonctionne bien. Ai-je manqué quelque chose ou est-ce que Server.UrlEncode ne fonctionne tout simplement pas correctement?Server.UrlEncode (chaîne s) ... n'est pas
Répondre
Utilisez les scripts Javascripts encodeURIComponent()/decodeURIComponent() pour l'encodage "aller-retour" avec le code URLEncode/URL de .Net.
EDIT
Pour autant que je sache, historiquement le "+" a été utilisé dans le codage URL comme une substitution spéciale pour l'espace char (ASCII 20). Si une implémentation ne prend pas en compte l'espace en tant que caractère spécial avec la substitution '+', alors elle doit encore y échapper en utilisant son code ASCII (d'où '% 20').
Il y a une très bonne discussion de la situation à http://bytes.com/topic/php/answers/5624-urlencode-vs-rawurlencode. D'ailleurs, ce n'est pas concluant. La RFC 2396 rassemble l'espace avec d'autres personnages sans une représentation non réservée, ce qui fait partie de la foule '% 20'.
RFC 1630 côtés avec le '+' foule (via forum discussion) ...
Au sein de la chaîne de requête, le signe plus est réservée comme abbréviation de un espace. Par conséquent, les vrais signes plus doivent être codés. Cette méthode a été utilisée pour faciliter le passage des URI de requête dans les systèmes qui n'autorisaient pas les espaces.
En outre, les RFCs principaux sont ...
RFC 1630 - Universal Resource Identifiers dans WWW
RFC 1738 - Uniform Resource Locator (URL)
RFC 2396 - Uniform Resource Identifiers (URI) : Générique Syntaxe
Un +
au lieu d'un espace est le codage correct de l'URL, tout comme l'échapperait à% 20. Voir l'article this (Programmation CGI en Perl - Encodage URL).
Le +
n'est pas quelque chose que JavaScript peut analyser, donc javascript échappera l'espace ou +
à %20
.
Pour autant que je le comprends les javas cript est corectly URL codant la chaîne alors que la méthode .net n'est pas
En fait, ils sont tous les deux faux!
JavaScript escape()
ne doit jamais être utilisé. En plus de ne pas encoder le caractère +
en %2B
, il code tous les caractères non ASCII en tant que séquence non standard %uNNNN
.
Pendant ce temps Server.UrlEncode
n'est pas exactement le codage d'URL en tant que tel, mais le codage à application/x-www-form-urlencoded
, qui devrait normalement être utilisé pour les paramètres de requête. L'utilisation de +
pour représenter un espace en dehors d'une construction name=value
, comme dans une partie de chemin, est incorrecte.
Ceci est plutôt regrettable. Vous pouvez essayer de remplacer le caractère +
par %20
après l'encodage avec UrlEncode()
lorsque vous codez une partie de chemin plutôt qu'un paramètre. Dans un paramètre, +
et %20
sont également bons.
Utilisation côté client et travaux côté client.
Le seul problème est que System.Uri.EscapeDataString a une longueur de chaîne maximale de 0xfff0. –
- 1. Java Stack/Nest Count
- 2. Server.UrlEncode vs Uri.EscapeDataString
- 3. chaîne s; &s+1; Légal? UB?
- 4. Access 2007 Nest requête parameterful
- 5. Problème UTF-8 Server.UrlEncode dans ASP Classic
- 6. Le fichier Server.UrlEncode ne fonctionne pas pour "*" ASP.net 3.5
- 7. Recherche de morceau avec Echo Nest Api
- 8. Comment imiter ASP Server.URLEncode dans ASP.NET?
- 9. println (Chaîne s) vs println (Objet o)
- 10. Ant me dit que mon test JUnit est réussie quand il nest pas clairement
- 11. Erreur de construction de l'Iphone - symbole (s) littéral (s) pas trouvé (s)
- 12. Comment puis-je référencer Server.UrlEncode dans une classe ASP.NET?
- 13. Comment identifier les données est codé en utilisant Server.UrlEncode() Asp.net
- 14. python% s multiples à propos dans une chaîne
- 15. Comment puis-je vérifier si la chaîne $ _GET ["s"] contient ++++?
- 16. Translating 'la chaîne de format s de C# C++ string.Format
- 17. Perl: utilise s/(remplace) et renvoie une nouvelle chaîne
- 18. s: étiquette ne charge pas la police
- 19. Quel est l'équivalent Ruby de `s =" hello,% s de Python Où est% s? " % ("John", "Mary") `
- 20. Qu'est-ce que $ {# $ {(S %%) chaîne // (\% ([KF1] |) \ {* \} | \% [Bbkf])}} signifie
- 21. Insertion variable de chaîne dans le paramètre S-Proc
- 22. question (s) concernant le (s) graphique (s) de tournoi
- 23. Nommez JQuery: connaissez-vous le (s) plugin (s) jquery (s) spécifique (s) utilisé (s) pour créer ce widget?
- 24. Quel (s) port (s) utilise XMPP?
- 25. Est-ce que cette regex a un ou deux groupes? "^ \\ s * (. *?) \\ s + - \\ s + '(. *)' \\ s * $"
- 26. Widget/plugin Wordpress - contenu basé sur le (s) texte (s)/page (s) visible (s)?
- 27. recueillir le (s) fichier (s) d'utilisateurs
- 28. Entity Framework - Colonne (s) manquante (s)?
- 29. Site (s) de conception logicielle (s)
- 30. Comment se débarrasser de '-managedObjectContext' que l'on ne trouve pas dans le (s) protocole (s)
Utilisez URLPathEncode à la place de bit avant le? Querystring voir http://stackoverflow.com/questions/4145823/httpserverutility-urlpathencode-vs-httpserverutility-urlencode?lq=1 –
Haha, c'est probablement la meilleure réponse donnée, malheureusement près de 2 ans après il est réellement utile. Oh bien au moins je le saurai pour référence future. –
:) En fait, il semble que Uri.EscapeDataString est celui à utiliser car URLPathEncode n'échappe pas les caractères tels que les signes de pourcentage http://stackoverflow.com/questions/9400445/how-do-y-correctly-escape-a-document -name-in-net –