( ( encode = encoded exceptions octet string . !arg:(?exceptions.?string) & :?encoded & @( !string : ? ( %@?octet ? & !encoded ( !octet : ( ~<0:~>9 | ~Z | ~z ) | @(!exceptions:? !octet ?) & !octet | "%" d2x$(asc$!octet) ) : ?encoded & ~ ) ) | str$!encoded ) & out$"without exceptions: " & out$(encode$(."http://foo bar/")) & out$(encode$(."mailto:Ivan")) & out$(encode$(."Aim ")) & out$(encode$(."mailto:Irma")) & out$(encode$(."User ")) & out$(encode$(."http://foo.bar.com/~user-name/_subdir/*~.html")) & out$" with RFC 3986 rules: " & out$(encode$("-._~"."http://foo bar/")) & out$(encode$("-._~"."mailto:Ivan")) & out$(encode$("-._~"."Aim ")) & out$(encode$("-._~"."mailto:Irma")) & out$(encode$("-._~"."User ")) & out$(encode$("-._~"."http://foo.bar.com/~user-name/_subdir/*~.html")) );