URL decoding: Difference between revisions
Content deleted Content added
Added solution for Action! |
|||
Line 52: | Line 52: | ||
WRITE: 'Encoded URL: ', lv_encoded_url, /, 'Decoded URL: ', lv_decoded_url.</lang> |
WRITE: 'Encoded URL: ', lv_encoded_url, /, 'Decoded URL: ', lv_decoded_url.</lang> |
||
=={{header|Action!}}== |
|||
<lang Action!>PROC Append(CHAR ARRAY s CHAR c) |
|||
s(0)==+1 |
|||
s(s(0))=c |
|||
RETURN |
|||
CHAR FUNC GetCharFromHex(CHAR c1,c2) |
|||
CHAR ARRAY hex=['0 '1 '2 '3 '4 '5 '6 '7 '8 '9 'A 'B 'C 'D 'E 'F] |
|||
BYTE i,res |
|||
res=0 |
|||
FOR i=0 TO 15 |
|||
DO |
|||
IF c1=hex(i) THEN res==+i LSH 4 FI |
|||
IF c2=hex(i) THEN res==+i FI |
|||
OD |
|||
RETURN (res) |
|||
PROC Decode(CHAR ARRAY in,out) |
|||
BYTE i |
|||
CHAR c |
|||
out(0)=0 |
|||
i=1 |
|||
WHILE i<=in(0) |
|||
DO |
|||
c=in(i) |
|||
i==+1 |
|||
IF c='+ THEN |
|||
Append(out,' ) |
|||
ELSEIF c='% THEN |
|||
c=GetCharFromHex(in(i),in(i+1)) |
|||
i==+2 |
|||
Append(out,c) |
|||
ELSE |
|||
Append(out,c) |
|||
FI |
|||
OD |
|||
RETURN |
|||
PROC PrintInv(CHAR ARRAY a) |
|||
BYTE i |
|||
IF a(0)>0 THEN |
|||
FOR i=1 TO a(0) |
|||
DO |
|||
Put(a(i)%$80) |
|||
OD |
|||
FI |
|||
RETURN |
|||
PROC Test(CHAR ARRAY in) |
|||
CHAR ARRAY out(256) |
|||
PrintInv("input ") |
|||
PrintF(" %S%E",in) |
|||
Decode(in,out) |
|||
PrintInv("decoded") |
|||
PrintF(" %S%E%E",out) |
|||
RETURN |
|||
PROC Main() |
|||
Test("http%3A%2F%2Ffoo%20bar%2F") |
|||
Test("http%3A%2F%2Ffoo+bar%2F*_-.html") |
|||
RETURN</lang> |
|||
{{out}} |
|||
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/URL_decoding.png Screenshot from Atari 8-bit computer] |
|||
<pre> |
|||
input http%3A%2F%2Ffoo%20bar%2F |
|||
decoded http://foo bar/ |
|||
input http%3A%2F%2Ffoo+bar%2F*_-.html |
|||
decoded http://foo bar/*_-.html |
|||
</pre> |
|||
=={{header|Ada}}== |
=={{header|Ada}}== |