2010-07-01 42 views
5

Ví dụ,Làm cách nào để thoát khỏi chuỗi URL trong Mathematica?

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

nên trở

foo.cgi%3Fabc%3D123 

này còn được gọi là percent-encoding.

Ngoài ra, để dễ đọc hơn, khoảng trắng nên mã hóa thành điểm cộng. Tôi tin rằng điều đó luôn được chấp nhận để thoát URL.

+0

Được yêu thích. Đây là điều tôi muốn làm một lần mỗi sáu tháng hoặc lâu hơn, và tôi luôn kết thúc việc sắp xếp lại thứ gì đó để hoàn thành công việc. – Pillsy

Trả lời

6

Một , sử dụng J/Link và 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" 

Ngoài ra còn có java.net.URLDecoder để giải mã.

+1

Cả hai câu trả lời đều xứng đáng với upvotes, nhưng nếu đó là câu hỏi của tôi tôi chấp nhận điều này, bởi vì có rất nhiều công cụ hữu ích bạn có thể nhận được thông qua JLink mà tôi luôn luôn quên đi. – Pillsy

4

Đây là giải pháp của tôi:

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

Như một phần thưởng, đây là một chức năng để mã hóa một danh sách các quy tắc như {a->2, b->3} vào thông số GET như a=2&b=3, với thích hợp URL mã hóa:

encode[c_] := cat @@ Riffle[cat[#1, "=", urlesc[#2]]& @@@ c, "&"] 
Các vấn đề liên quan