2010-07-01 3 views
5

Par exemple,Comment j'échappe à une URL dans une chaîne dans Mathematica?

urlesc["foo.cgi?abc=123"] 

devrait retourner

foo.cgi%3Fabc%3D123 

Ceci est également connu sous le nom percent-encoding.

De plus, pour une meilleure lisibilité, les espaces devraient être codés en plus. Je crois que c'est toujours acceptable pour l'échappement d'URL.

+0

Favori. C'est quelque chose que je veux faire une fois tous les six mois, et je finis toujours par relancer quelque chose pour faire le travail. – Pillsy

Répondre

6

Une autre méthode, en utilisant J/Link et java.net.URLEncoder:

In[116]:= Needs["JLink`"]; InstallJava[]; 
    LoadJavaClass["java.net.URLEncoder"]; 

In[118]:= URLEncoder`encode["foo.cgi?abc=123"] 
Out[118]= "foo.cgi%3Fabc%3D123" 

Il y a aussi java.net.URLDecoder pour le décodage.

+1

Les deux réponses sont dignes d'être mises à jour, mais si c'était ma question, j'accepterais celle-ci, car il y a beaucoup de choses utiles que vous pouvez obtenir via JLink, que j'ai toujours oubliées. – Pillsy

4

Voici ma solution:

cat = [email protected]@(ToString/@{##})&;   (* Like sprintf/strout in C/C++. *) 
re = RegularExpression; 

hex = IntegerString[#,16]&;  (* integer to hex, represented as a string *) 
up = ToUpperCase; 
asc = ToCharacterCode[#][[1]]&;     (* character to ascii code *) 
subst = StringReplace; 

urlesc[s_String] := subst[s, {" "->"+", [email protected]"[^\w\_\:\.]":>"%"<>[email protected]@[email protected]"$0"}] 
urlesc[x_] := [email protected]@x 
unesc[s_String] := subst[s, [email protected]"\\%(..)":>[email protected]["$1",16]] 

En bonus, voici une fonction pour encoder une liste de règles comme {a->2, b->3} en paramètres GET comme a=2&b=3, avec l'URL-encodage approprié:

encode[c_] := cat @@ Riffle[cat[#1, "=", urlesc[#2]]& @@@ c, "&"] 
Questions connexes