2010-07-01 21 views
5

Ad esempio,Come faccio a URL-escape di una stringa in Mathematica?

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

dovrebbe restituire

foo.cgi%3Fabc%3D123 

Questo è anche conosciuto come percent-encoding.

Inoltre, per una migliore leggibilità, gli spazi devono essere codificati in termini positivi. Credo che sia sempre accettabile per l'escape dell'URL.

+0

Preferiti. Questo è qualcosa che voglio fare una volta ogni sei mesi o giù di lì, e finisco sempre per ripetere qualcosa per fare il lavoro. – Pillsy

risposta

6

altro metodo, utilizzando J/Link e 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" 

C'è anche java.net.URLDecoder per la decodifica.

+1

Entrambe le risposte sono degne di upvotes, ma se fosse la mia domanda la accetterei, perché ci sono molte cose utili che puoi ottenere tramite JLink di cui mi dimentico sempre. – Pillsy

4

Ecco la mia soluzione:

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]] 

Come bonus, ecco una funzione per codificare un elenco di regole come {a->2, b->3} in parametri GET come a=2&b=3, con adeguate URL-encoding:

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