例如,
应该返回
urlesc["foo.cgi?abc=123"]
应该返回
foo.cgi%3Fabc%3D123
这也被称为百分号编码。
另外,为了更好的可读性,空格应该编码为加号。 我相信对于URL转义来说这总是可以接受的。
urlesc["foo.cgi?abc=123"]
foo.cgi%3Fabc%3D123
这也被称为百分号编码。
另外,为了更好的可读性,空格应该编码为加号。 我相信对于URL转义来说这总是可以接受的。
另一种方法是使用 J/Link 和 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
可用于解码。
cat = StringJoin@@(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, {" "->"+", re@"[^\w\_\:\.]":>"%"<>up@hex@asc@"$0"}]
urlesc[x_] := urlesc@cat@x
unesc[s_String] := subst[s, re@"\\%(..)":>FromCharacterCode@FromDigits["$1",16]]
{a->2, b->3}
)编码为 GET 参数,例如 a=2&b=3
,并进行适当的 URL 编码。encode[c_] := cat @@ Riffle[cat[#1, "=", urlesc[#2]]& @@@ c, "&"]