Have you compared what the strings look like (before passing
them to GD) using the two calling methods (form submission
vs. URL explicit definition)?
I.e. good old fashioned print statement debugging?
It seems there would have to be a difference in the strings
for GD to be able to handle one and not the other.
| [reply] |
| [reply] [d/l] |
the CGI.pm alters the basic structure of the text in the text field
By "basic structure" does this mean that the textarea box text is formatted in
some manner within the textarea? (for instance, pasting in text from a word processor
or spreadsheet, or using a specific font?). If this is the case, then you have possibly some rogue characters (like
"bullets") and will need to strip them/replace them as extremely pointed out.
Providing perhaps a snippet of the offending code would be helpful.
| [reply] |
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. | [reply] [d/l] |
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" | [reply] [d/l] [select] |
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 | [reply] [d/l] [select] |