2010-07-01 10 views
5

उदाहरण के लिए,मैथमैटिका में एक स्ट्रिंग को यूआरएल से कैसे बचूं?

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

foo.cgi%3Fabc%3D123 

यह भी percent-encoding रूप में जाना जाता लौटना चाहिए।

इसके अलावा, बेहतर पठनीयता के लिए, रिक्त स्थान को प्लस में एन्कोड करना चाहिए। मुझे विश्वास है कि यूआरएल से बचने के लिए हमेशा स्वीकार्य है।

+0

पसंदीदा। यह कुछ ऐसा है जो मैं हर छह महीने में एक बार करना चाहता हूं, और मैं हमेशा काम पूरा करने के लिए कुछ फिर से रोलिंग समाप्त करता हूं। – Pillsy

उत्तर

6

एक और विधि, जे/लिंक और 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" 

डिकोडिंग के लिए java.net.URLDecoder भी है।

+1

दोनों उत्तर अपवॉट के योग्य हैं, लेकिन यदि यह मेरा प्रश्न था तो मैं इसे स्वीकार करूँगा, क्योंकि जेएलआईंक के माध्यम से आप बहुत सारी उपयोगी चीजें प्राप्त कर सकते हैं जिन्हें मैं हमेशा भूल जाता हूं। – Pillsy

4

यहाँ मेरी समाधान है:

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

एक बोनस के रूप में, यहाँ GET पैरामीटर में a=2&b=3 तरह {a->2, b->3} तरह नियमों की एक सूची एन्कोड करने के लिए उचित URL एन्कोडिंग के साथ एक समारोह है:

encode[c_] := cat @@ Riffle[cat[#1, "=", urlesc[#2]]& @@@ c, "&"] 
संबंधित मुद्दे