Как делают меня Escape URL строка в Mathematica?

Например,

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

должен возвратиться

foo.cgi%3Fabc%3D123

Это также известно как кодирование процента.

Кроме того, для лучшей удобочитаемости пробелы должны закодировать к плюсам. Я полагаю, что это всегда приемлемо для выхода URL.

5
задан dreeves 1 July 2010 в 19:11
поделиться

2 ответа

Другой метод, использующий 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 для декодирования.

6
ответ дан 13 December 2019 в 22:01
поделиться

Вот мое решение:

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, "&"]
4
ответ дан 13 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: