module WASH.Utility.URLCoding (encode, decode) where
import Char
import WASH.Utility.Hex
encode :: String -> String
encode = urlEncode
decode :: String -> String
decode = urlDecode
urlEncode :: String -> String
urlEncode xs =
urlEncode' xs ""
urlEncode' "" = id
urlEncode' (x:xs) =
(if isAlphaNum x
then showChar x
else showChar '%' .
showsHex 2 (ord x)) . urlEncode' xs
urlDecode :: String -> String
urlDecode "" = ""
urlDecode ('+':xs) =
' ' : urlDecode xs
urlDecode ('%':upper:lower:xs) =
chr (16 * hexDigitVal upper + hexDigitVal lower) : urlDecode xs
urlDecode (x:xs) =
x : urlDecode xs