AFAIK В стандартных библиотеках нет кодировщика URL. Думаю, что я «заимствовал» следующий код из Yaws или, может быть, один из других веб-серверов Erlang:
% Utility function to convert a 'form' of name-value pairs into a URL encoded
% content string.
urlencode(Form) ->
RevPairs = lists:foldl(fun({K,V},Acc) -> [[quote_plus(K),$=,quote_plus(V)] | Acc] end, [],Form),
lists:flatten(revjoin(RevPairs,$&,[])).
quote_plus(Atom) when is_atom(Atom) ->
quote_plus(atom_to_list(Atom));
quote_plus(Int) when is_integer(Int) ->
quote_plus(integer_to_list(Int));
quote_plus(String) ->
quote_plus(String, []).
quote_plus([], Acc) ->
lists:reverse(Acc);
quote_plus([C | Rest], Acc) when ?QS_SAFE(C) ->
quote_plus(Rest, [C | Acc]);
quote_plus([$\s | Rest], Acc) ->
quote_plus(Rest, [$+ | Acc]);
quote_plus([C | Rest], Acc) ->
<<Hi:4, Lo:4>> = <<C>>,
quote_plus(Rest, [hexdigit(Lo), hexdigit(Hi), ?PERCENT | Acc]).
revjoin([], _Separator, Acc) ->
Acc;
revjoin([S | Rest],Separator,[]) ->
revjoin(Rest,Separator,[S]);
revjoin([S | Rest],Separator,Acc) ->
revjoin(Rest,Separator,[S,Separator | Acc]).
hexdigit(C) when C < 10 -> $0 + C;
hexdigit(C) when C < 16 -> $A + (C - 10).
Похоже, этот совет устарел - перейдите по ссылке, и вы увидите `edoc_lib: escape_uri` - MIA. Не уверен, что релиз erlang представил это изменение. – jtmoulia 2015-03-31 23:34:06
[Он есть и экспортируется.] (Https://github.com/erlang/otp/blob/172e812c491680fbb175f56f7604d4098cdc9de4/lib/edoc/src/edoc_lib.erl#L382-L414). Я не уверен, почему это не в справочная страница. – mqsoh 2015-05-30 02:59:17