Article 14455 of comp.infosystems.www:
Xref: feenix.metronet.com comp.infosystems.www:14455
Path: feenix.metronet.com!news.utdallas.edu!wupost!math.ohio-state.edu!cyber2.cyberstore.ca!vanbc.wimsey.com!mdavcr!rdr
From: [email protected] (Randolph Roesler)
Newsgroups: comp.infosystems.www
Subject: Re: Forms (POST) and PERL
Message-ID: <[email protected]>
Date: 29 Apr 94 00:01:38 GMT
References: <[email protected]>
Organization: MacDonald Dettwiler, 13800 Commerce Parkway, Richmond, BC, Canada  V6V 2J3
Lines: 80

I use the following perl stub as a bases for writing
post scripts in perl.  No problems with newlines.

#!/usr/local/bin/perl
#
# stub to read stdin cgi post method and produce $values{field}
# for each field in the data steam
#
# 1994, Randy Roesler, MacDonald Detwiler
#
# Use at your own risk

@cgi_env = ( "SERVER_SOFTWARE","SERVER_NAME","GATEWAY_INTERFACE",
    "SERVER_PROTOCOL","SERVER_PORT","REQUEST_METHOD",
    "PATH_INFO","PATH_TRANSLATED","SCRIPT_NAME","QUERY_STRING",
    "REMOTE_HOST","REMOTE_ADDR","REMOTE_USER","AUTH_TYPE",
    "CONTENT_TYPE","CONTENT_LENGTH","HTTP_ACCEPT" );

@characters = (
       "\x00","\x01","\x02","\x03","\x04","\x05","\x06","\x07",
       "\x08","\x09","\x0A","\x0B","\x0C","\x0D","\x0E","\x0F",
       "\x10","\x11","\x12","\x13","\x14","\x15","\x16","\x17",
       "\x18","\x19","\x1A","\x1B","\x1C","\x1D","\x1E","\x1F",
       "\x20","\x21","\x22","\x23","\x24","\x25","\x26","\x27",
       "\x28","\x29","\x2A","\x2B","\x2C","\x2D","\x2E","\x2F",
       "\x30","\x31","\x32","\x33","\x34","\x35","\x36","\x37",
       "\x38","\x39","\x3A","\x3B","\x3C","\x3D","\x3E","\x3F",
       "\x40","\x41","\x42","\x43","\x44","\x45","\x46","\x47",
       "\x48","\x49","\x4A","\x4B","\x4C","\x4D","\x4E","\x4F",
       "\x50","\x51","\x52","\x53","\x54","\x55","\x56","\x57",
       "\x58","\x59","\x5A","\x5B","\x5C","\x5D","\x5E","\x5F",
       "\x60","\x61","\x62","\x63","\x64","\x65","\x66","\x67",
       "\x68","\x69","\x6A","\x6B","\x6C","\x6D","\x6E","\x6F",
       "\x70","\x71","\x72","\x73","\x74","\x75","\x76","\x77",
       "\x78","\x79","\x7A","\x7B","\x7C","\x7D","\x7E","\x7F",
       "\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87",
       "\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F",
       "\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97",
       "\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F",
       "\xA0","\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7",
       "\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF",
       "\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7",
       "\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE","\xBF",
       "\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7",
       "\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF",
       "\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7",
       "\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF",
       "\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7",
       "\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",
       "\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7",
       "\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE","\xFF",
       );

read( STDIN,$message,$ENV{CONTENT_LENGTH} );

$* = 1; # multi-line matching

@items = split( /&/, $message );

foreach $item ( @items ) {

 local( $name,$value ) = split( /=/, $item );

 while( $value =~ /^([^%]*)%(\d\d)(.*)$/ ) {
    $values{$name} .= $1;
    $values{$name} .= $characters[hex($2)];
    $value = $3;
 }

 $values{$name} .= $value;
}

$* = 0; # single line matching


--
Randy Roesler                                MacDonald Dettwiler & Assc.
Ph. 604-278-3411 Fax. 604-278-2936           13800 Commerce Parkway,
email ...!uunet!van-bc!mdavcr!rdr            Richmond BC Canada
rdr%[email protected] or [email protected]       V6V 2J3


Article 14476 of comp.infosystems.www:
Xref: feenix.metronet.com comp.infosystems.www:14476
Path: feenix.metronet.com!news.utdallas.edu!wupost!math.ohio-state.edu!howland.reston.ans.net!EU.net!sunic!ugle.unit.no!trane.uninett.no!nntp.uio.no!nntp.uio.no!aas
From: [email protected] (Gisle Aas)
Newsgroups: comp.infosystems.www
Subject: Re: Forms (POST) and PERL
Date: 29 Apr 1994 09:36:25 GMT
Organization: Norwegian Computing Center, Oslo, Norway
Lines: 50
Message-ID: <[email protected]>
References: <[email protected]> <[email protected]>
Reply-To: [email protected]
NNTP-Posting-Host: nora.nr.no
In-reply-to: [email protected]'s message of 29 Apr 94 00:01:38 GMT

In article <[email protected]> [email protected] (Randolph Roesler) writes:
>   @characters = (
>          "\x00","\x01","\x02","\x03","\x04","\x05","\x06","\x07",
>          "\x08","\x09","\x0A","\x0B","\x0C","\x0D","\x0E","\x0F",
>          "\x10","\x11","\x12","\x13","\x14","\x15","\x16","\x17",
>          "\x18","\x19","\x1A","\x1B","\x1C","\x1D","\x1E","\x1F",
>          "\x20","\x21","\x22","\x23","\x24","\x25","\x26","\x27",
>          "\x28","\x29","\x2A","\x2B","\x2C","\x2D","\x2E","\x2F",
>          "\x30","\x31","\x32","\x33","\x34","\x35","\x36","\x37",
>          "\x38","\x39","\x3A","\x3B","\x3C","\x3D","\x3E","\x3F",
>          "\x40","\x41","\x42","\x43","\x44","\x45","\x46","\x47",
>          "\x48","\x49","\x4A","\x4B","\x4C","\x4D","\x4E","\x4F",
>          "\x50","\x51","\x52","\x53","\x54","\x55","\x56","\x57",
>          "\x58","\x59","\x5A","\x5B","\x5C","\x5D","\x5E","\x5F",
>          "\x60","\x61","\x62","\x63","\x64","\x65","\x66","\x67",
>          "\x68","\x69","\x6A","\x6B","\x6C","\x6D","\x6E","\x6F",
>          "\x70","\x71","\x72","\x73","\x74","\x75","\x76","\x77",
>          "\x78","\x79","\x7A","\x7B","\x7C","\x7D","\x7E","\x7F",
>          "\x80","\x81","\x82","\x83","\x84","\x85","\x86","\x87",
>          "\x88","\x89","\x8A","\x8B","\x8C","\x8D","\x8E","\x8F",
>          "\x90","\x91","\x92","\x93","\x94","\x95","\x96","\x97",
>          "\x98","\x99","\x9A","\x9B","\x9C","\x9D","\x9E","\x9F",
>          "\xA0","\xA1","\xA2","\xA3","\xA4","\xA5","\xA6","\xA7",
>          "\xA8","\xA9","\xAA","\xAB","\xAC","\xAD","\xAE","\xAF",
>          "\xB0","\xB1","\xB2","\xB3","\xB4","\xB5","\xB6","\xB7",
>          "\xB8","\xB9","\xBA","\xBB","\xBC","\xBD","\xBE","\xBF",
>          "\xC0","\xC1","\xC2","\xC3","\xC4","\xC5","\xC6","\xC7",
>          "\xC8","\xC9","\xCA","\xCB","\xCC","\xCD","\xCE","\xCF",
>          "\xD0","\xD1","\xD2","\xD3","\xD4","\xD5","\xD6","\xD7",
>          "\xD8","\xD9","\xDA","\xDB","\xDC","\xDD","\xDE","\xDF",
>          "\xE0","\xE1","\xE2","\xE3","\xE4","\xE5","\xE6","\xE7",
>          "\xE8","\xE9","\xEA","\xEB","\xEC","\xED","\xEE","\xEF",
>          "\xF0","\xF1","\xF2","\xF3","\xF4","\xF5","\xF6","\xF7",
>          "\xF8","\xF9","\xFA","\xFB","\xFC","\xFD","\xFE","\xFF",
>          );
>
>     while( $value =~ /^([^%]*)%(\d\d)(.*)$/ ) {
>       $values{$name} .= $1;
>       $values{$name} .= $characters[hex($2)];
>       $value = $3;
>     }

It is much shorter to write:

       $value =~ s/%([\da-f][\da-f])/pack("C",hex($1))/gei;

And it even works!

--
� Gisle Aas - Norsk Regnesentral                     <[email protected]>