2009-02-14 6 views

Répondre

7

pour le codage des paramètres d'URL, à la fois 20% et + sont des représentations valides de le caractère d'espace, et les deux URLVariables.toString() et URLUtil.objectToString() émettent application compatible/x-www-form-urlencoded données en utilisant le gabarit (par ECMA-262). Les fonctions encodeURI(), encodeURIComponent() et escape() fonctionnent toutes de la même manière. Des AS3 docs:

flash.net.URLVariables.toString()

Renvoie une chaîne contenant toutes les variables énumérables , dans le codage de contenu MIME application/x-www-form-urlencoded.

mx.utils.URLUtil.objectToString()

Vous utilisez généralement cette méthode pour convertir un objet ActionScript à une chaîne que vous ajoutez ensuite à la fin d'une URL . Par défaut, les URL non valides caractères sont codés en URL (convertis au format% XX).

encodeURIComponent()

encode une chaîne dans un composant URI valide. Convertit une sous-chaîne d'un URI en une chaîne dans laquelle tous les caractères sont codés sous la forme de séquences d'échappement UTF-8 sauf si un caractère appartient à un petit groupe de caractères de base .

escape()

convertit le paramètre en chaîne et code dans un format de code URL , où plus des caractères non alphanumériques sont remplacés par des séquences hexadécimales% .

Voici un exemple montrant l'utilisation et la production des quatre approches:

import mx.utils.URLUtil; 

private function test():void 
{ 
    var url:String = "http://www.google.com/search?"; 
    var s:String = "here is my search query"; 

    var variables:URLVariables = new URLVariables(); 
    variables.q = s; 

    var o:Object = new Object(); 
    o.q = s; 

    trace(url + "q=" + encodeURIComponent(s)); 
    trace(url + variables.toString()); 
    trace(url + "q=" + escape(s)); 
    trace(url + URLUtil.objectToString(o)); 
} 

Les quatre émettent le même résultat (tout comme propre encodeURIComponent de JavaScript() fait):

// http://www.google.com/search?q=here%20is%20my%20search%20query 

Je suis d'accord que les signes plus sont plus faciles sur les yeux, cependant! Pour les échanger manuellement:

trace(url + "q=" + escape(s).split("%20").join("+")); 

Mais s'il y a une classe ActionScript ou la fonction de haut niveau qui utilise des signes plus au lieu de séquences hexagonales pour les espaces, je ne suis pas au courant.

+0

C'est une réponse complète si j'en ai jamais lu une. :) –

+0

Chaîne "C++ est amusant "lorsqu'il est codé par escape (s) .split ("% 20 "). join (" + ") est" C+++ is + fun ", ce qui est impossible à décoder en original. pour le premier% 2B, n'est-ce pas? – jedierikb

+0

Bon, c'est un bon point (Personnellement, je n'aime pas l'idée d'échanger les signes plus, de toute façon.) –

0

Je voudrais ajouter que évasion et encodeURIComponent ne donnera le même résultat si la chaîne en pas mutlibyte. Dans le cas d'une chaîne multi-octets comme ñ (en espagnol), escape() n'encodera pas la valeur correcltly. en utilisant encodeURIComponent et decodeURIComponent will. J'ai découvert le hardway essayant d'utiliser escape() sur une chaîne multi-octets en utilisant new navigateToURL (new URLRequest (qui échouera silencieusement lors de l'utilisation de l'URL mailto)

Questions connexes