in reply to CGI parsing difficulty

probably because spaces are going to be translated into %20 in the HTTP request -- it's not CGI.pm 'messing with' anything, it's part of HTTP.

if it works hitting the script 'manually', maybe you need to check your line-parsing. if you're trying to split on the + sign, you're probably not getting any parsing.

that said, i think we need a code snippet to further offer assistance.

Replies are listed 'Best First'.
Re: Re: CGI parsing difficulty
by tame1 (Pilgrim) on Nov 22, 2000 at 00:57 UTC
    OK - the form is just a single field, a textarea field.
    I type in multiple lines, seperated by :: (for now)

    Here is the code that is troublesome in the target script:

    my $text = $query->param("text"); make_image($text); exit(0); ########################################################## # Make an image from the lines in the array # sub make_image { my $text = shift; my @lines = split(/\n/,$text); my $counter = 80; foreach my $line (@lines) { $im->stringTTF($black, "/home/httpd/html/ribbon.ttf", 15, 0, 5 +0, 80,$line); if ($@) { $im->string(gdSmallFont, 50, 150, "$@", $black); die "Cannot print!$!\n"; } $counter += 10; } binmode STDOUT; print $query->header(-type=>'image/png'); print $im->png; }
    This code has been altered a million times, so if you find some syntax error, it's probably something I haven't fixed from the last edit ;-)

    Anyhow, if I hit http://localhost/myscript.pl?text=I+LOVE+MY+WIFE then it works. Going through a web form which then writes <img src="/myscript.pl?$text"> ($text being pulled by $text = $q->param("text") ) then it only prints the first letter, the I.

    My goal here is to eventually make a script that people can type in their text, the thing makes a multi-line image from it with that nice ribbon font, and the result gets sent as a kind of greeting card/invitation (for weddings, child birth announcements, etc).

    Any help would be appreciated.

    What does this little button do . .<Click>; "USER HAS SIGNED OFF FOR THE DAY"
      Anyhow, if I hit http://localhost/myscript.pl?text=I+LOVE+MY+WIFE then it works. Going through a web form which then writes <img src="/myscript.pl?$text"> ($text being pulled by $text = $q->param("text") ) then it only prints the first letter, the I.
      You are properly URI-escaping the code you print in $text, right? You can't just do this:
      print qq{<img src="/myscript.pl?$text">};
      because you need to re-percentify or plusify spaces, etc etc., as in:
      use URI; my $uri = URI->new("/myscript.pl"); $uri->query($text); my $uri_string = $uri->as_string; print qq{<img src="$uri_string">};

      -- Randal L. Schwartz, Perl hacker

        Well CRAP!!

        Finally someone has the answer!!

        Thanks Merlyn. Too bad all my votes for today are gone ;-)

        What does this little button do . .<Click>; "USER HAS SIGNED OFF FOR THE DAY"
        Randall, this worked fine with one exception:

        I had to replace $uri->query with $uri->query_form($key=>$text)

        As it stands I also had to replace the imager.cfm with an imageform.cgi,
        as there was no way to force Cold Fusion to clean up the
        string before calling the image maker.(At least not a method
        that I am aware of yet.)

        Thanks for all the help, everyone!

        What does this little button do . .<Click>; "USER HAS SIGNED OFF FOR THE DAY"