parse_query() #@ USAGE: parse_query var ... { local var val local IFS='&' vars="&$*&" [ "$REQUEST_METHOD" = "POST" ] && read QUERY_STRING set -f for item in $QUERY_STRING do var=${item%%=*} val=${item#*=} val=${val//+/ } case $vars in *"&$var&"* ) case $val in *%[0-9a-fA-F][0-9a-fA-F]*) val=$( printf "%b" "${val//\%/\\x}." ) val=${val%.} esac eval "$var=\$val" ;; esac done set +f }