Linux/KSH CGI Parser

Bizen | Linux | Recent Changes | Preferences

#!/bin/ksh
#
# CGI parser in PURE ksh
#
# Phil Ehrens <pehrens@ligo.caltech.edu>
#

typeset -A htmlesc
typeset -A params

htmlesc['%3D']='='
htmlesc['%2A']='*'
htmlesc['%2B']='+'
htmlesc['%28']='('
htmlesc['%29']=')'
htmlesc['%5E']='^'
htmlesc['%22']='"'
htmlesc['%5B']='['
htmlesc['%5D']=']'
htmlesc['%3A']=':'
htmlesc['%7B']='{'
htmlesc['%7D']='}'
htmlesc['%24']='$'
htmlesc['%26']='&'
htmlesc['%27']="'"
htmlesc['%21']='!'
htmlesc['%3F']='?'
htmlesc['%7C']='|'
htmlesc['%7E']='~'
htmlesc['%3B']=';'
htmlesc['%3C']='<'
htmlesc['%3E']='>'
htmlesc['%2F']='/'
htmlesc['%23']='#'
htmlesc['%40']='@'
htmlesc['%60']='`'
htmlesc['%5C']="\\"

_parse_() {
   typeset item key val esc
   OIFS="$IFS"
   IFS='&'
   [ "$REQUEST_METHOD" = "POST" ] && read QUERY_STRING

   for item in $QUERY_STRING
   do
      key=${item%%=*}
      val=${item#*=}
      val=${val//+/ }
      
      for esc in ${!htmlesc[*]}
      do
         val=${val//$esc/${htmlesc[$esc]}} 
      done

      val=${val//%25/%}
      val=${val%"%0A"}
      
      params[$key]=$val
   done
   IFS="$OIFS"
}

_respond_() {
   typeset header
   header="Content-Type: text/html\n\n"
   print -n $header$*
}

Bizen | Linux | Recent Changes | Preferences

Last edited December 1, 2011 8:32 am by Pokute
Search Bizen: