|
@@ -2,9 +2,26 @@
|
|
-export([escape/1, unescape/1]).
|
|
-export([escape/1, unescape/1]).
|
|
|
|
|
|
escape(Path) -> R = reserved(), lists:append([char_encode(Char, R) || Char <- Path]).
|
|
escape(Path) -> R = reserved(), lists:append([char_encode(Char, R) || Char <- Path]).
|
|
-unescape(Str) -> uri_string:percent_decode(Str).
|
|
|
|
|
|
+unescape(Str) -> decode(Str).
|
|
reserved() -> sets:from_list([$/, $\\, $:, $%]).
|
|
reserved() -> sets:from_list([$/, $\\, $:, $%]).
|
|
char_encode(Char, Reserved) ->
|
|
char_encode(Char, Reserved) ->
|
|
case sets:is_element(Char, Reserved) of
|
|
case sets:is_element(Char, Reserved) of
|
|
true -> [$% | http_util:integer_to_hexlist(Char)];
|
|
true -> [$% | http_util:integer_to_hexlist(Char)];
|
|
false -> [Char] end.
|
|
false -> [Char] end.
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+%% from http_uri:decode/1
|
|
|
|
+decode(String) ->
|
|
|
|
+ do_decode(String).
|
|
|
|
+
|
|
|
|
+do_decode([$%,Hex1,Hex2|Rest]) ->
|
|
|
|
+ [hex2dec(Hex1)*16+hex2dec(Hex2)|do_decode(Rest)];
|
|
|
|
+do_decode([First|Rest]) ->
|
|
|
|
+ [First|do_decode(Rest)];
|
|
|
|
+do_decode([]) ->
|
|
|
|
+ [].
|
|
|
|
+
|
|
|
|
+hex2dec(X) when (X>=$0) andalso (X=<$9) -> X-$0;
|
|
|
|
+hex2dec(X) when (X>=$A) andalso (X=<$F) -> X-$A+10;
|
|
|
|
+hex2dec(X) when (X>=$a) andalso (X=<$f) -> X-$a+10.
|
|
|
|
+
|