formparse
NAME
formparse
SYNOPSIS
formparse [ -rE ] [ -o dir ] [ query ]
DESCRIPTION
formparse
receives POST
data. Thus formparse
is used in conjugation with POST
method.Flag
-E
is used only for debugging purpose. Under this flag, formparse
will only echo the input.The argument query is holdover in the age of old version of Pegasus. Current Pegasus processes query string internally and that means query of
formparse
is needless.The flag “
-r
” is no effect; the option was used to remove CR code but current formparse
always removes CR code except in accepting file.
In HTML, we have two types of encoding: application/x-www-form-urlencoded
and multipart/form-data
.
Formparse can handles both types by executing (without option) in CGI.
formparse
application/x-www-form-urlencoded
Assume we have following form:
<form method="POST" action="baz.cgi"> <input type="checkbox" name="foo" value="bar1">Bar1<br> <input type="checkbox" name="foo" value="bar2">Bar2<br> <input type="checkbox" name="foo" value="bar3">Bar3<br> <input type="reset" value="reset"> <input type="submit"> </form>and assume you checked Bar1 and Bar3 and then push “submit” button.
The submitted data will be received by
formparse
in baz.cgi and directory “/tmp/foo
” will be created with the following files:/tmp/foo/clone /tmp/foo/0 /tmp/foo/1These contents are “2”, “bar1” and “bar3” respectively.
You can confirm the above statement using the following CGI program.
#!/bin/rc echo Content-Type: text/plain echo formparse ls /tmp/foo for (x in /tmp/foo/*){ echo -n $x: cat $x echo }You can use other directory than “
/tmp
” by the option “-o dir
”.
multipart/form-data
Another important role of “formparse
” is receiving files.
Assume we use following HTML code:
<form enctype="multipart/form-data" method="POST" action="baz.cgi"> <input type="file" name="foo" size="60" multiple><br> <input type="reset" value="reset"> <input type="submit" value="send"><br> </form>
In HTML5, we have a new flag “multiple
” in input
tag in case type
is “file
”, which enables multiple selection of files using operations:
OSX: command + left_button
Win: ctrl + left_button
With this code, CGI will receive these files in /tmp/file/bar1
, /tmp/file/bar2
, ...
where bar1
, bar2
, ... are filenames that were selected.
Without “multiple
” flag, browsers does not allow multiple selection.
NOTE: Formparse does not support old format
Content-Type: multipart/mixedThe format is obsoleted in HTML5.
My testing shows that Chrome, Firefox, Safari, Opera and even IE11 do not send files using this old format. (2014/12/11)
BUGS
Not known.However Formparse was written in old days and the internal code is dirty. It is better to be rewritten.
SOURCE
http://plan9.aichi-u.ac.jp/netlib/cgitools/