30 lines
720 B
Text
30 lines
720 B
Text
|
|
--
|
||
|
|
-- demo\rosetta\encode_url.exw
|
||
|
|
-- ===========================
|
||
|
|
--
|
||
|
|
function nib(integer b)
|
||
|
|
return b+iff(b<=9?'0':'A'-10)
|
||
|
|
end function
|
||
|
|
|
||
|
|
function encode_url(string s, string exclusions="", integer spaceplus=0)
|
||
|
|
string res = ""
|
||
|
|
for i=1 to length(s) do
|
||
|
|
integer ch = s[i]
|
||
|
|
if ch=' ' and spaceplus then
|
||
|
|
ch = '+'
|
||
|
|
elsif not find(ch,exclusions)
|
||
|
|
and (ch<'0'
|
||
|
|
or (ch>'9' and ch<'A')
|
||
|
|
or (ch>'Z' and ch<'a')
|
||
|
|
or ch>'z') then
|
||
|
|
res &= '%'
|
||
|
|
res &= nib(floor(ch/#10))
|
||
|
|
ch = nib(and_bits(ch,#0F))
|
||
|
|
end if
|
||
|
|
res &= ch
|
||
|
|
end for
|
||
|
|
return res
|
||
|
|
end function
|
||
|
|
|
||
|
|
printf(1,"%s\n",{encode_url("http://foo bar/")})
|