FORM data from a web client does not contain newline characters.

Feedback from the client arrives in a "URL encoded" format where:
* Special characters (!@#$%^&* etc.) are hexified (# is turned into %23, for example)
* The space character is turned into a "+" character
* The FORM entries are grouped into name/value pairs.
* The name/value pairs are separated from each other by the "&" character
* The name and value are separated from each other by the "=" character
* stdin contains the whole (sometimes very long) string

For example, if I have a FORM which asks for the user's name and address and the user 
responded:
   Name: Bill Clinton
   Address: 1600 Pennsylvania Apt #4
it might arrive in stdin looking like:
   name=Bill+Clinton&address=1600+Pennsylvania+Apt+%234

I normally use the POST method to send data from the client to the server.
You could try the following perl code to decode this input:

if ($ENV{'REQUEST_METHOD'} eq 'POST') {

    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

    @pairs = split(/&/, $buffer);
    foreach $pair (@pairs) {
       ($name, $value) = split(/=/, $pair);
       $value =~ tr/+/ /;
       $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
       $FORM{$name} = $value;
    }
    .
    .
    .
}

The result in this case will be two hash values defined:
    $FORM(name) = "Bill Clinton";
    $FORM(address) = "1600 Pennsylvania Apt #4";

Good luck,
Ron Brinkman

-----Original Message-----
From:   Bill Carlson [SMTP:[EMAIL PROTECTED]]
Sent:   Wednesday, September 06, 2000 8:20 AM
To:     [EMAIL PROTECTED]
Subject:        Re: [OT] perl question [answered]

On Wed, 6 Sep 2000, Bret Hughes wrote:

> Thanks for the tips guys.  As I was looking at my code, I
> realied that I had not actually tried the combination that I
> posted.  What i did try was:
> 
> @resarray= split /"\n"/, $resstring;
> 
> Which for some reason I can not discern, puts everything
> (multiple lines) in the first element of the array.   If some
> one would care to educate me on why that is I relly would like
> to know. I thought the " allowed interpolation of the special
> backslashed chars.

Bret,

You don't need the quotes in a regex expression. The string is in the
first element of the array because your expression didn't match anything,
ie there are no sequences  "\n" in the string. You want:
        @resarray = split /\n/, $resstring;

Now, whether that actually does what you want depends on what is in
$resstring to begin with. You might try running the app with perl in debug
mode (a good thing to learn).

HTH,


Bill Carlson
------------
Systems Programmer    [EMAIL PROTECTED]    |  Opinions are mine,
Virtual Hospital      http://www.vh.org/        |  not my employer's.
University of Iowa Hospitals and Clinics        |



_______________________________________________
Redhat-list mailing list
[EMAIL PROTECTED]
https://listman.redhat.com/mailman/listinfo/redhat-list



_______________________________________________
Redhat-list mailing list
[EMAIL PROTECTED]
https://listman.redhat.com/mailman/listinfo/redhat-list

Reply via email to