Hallo Alex,
use CGI::Enurl;
$value = "test 4576 + $%&%&/!""&;$%&%/&/(";
print "Content-type: text/html\n\n";
print "test: ",enurl($value);
Bis hierher sieht doch alles ganz gut aus.
aber am Ende steht da "5". das war's.
Uups? Ich verwende das Modul nicht, und hab`s auch nicht installiert. Ich habe mir nur seinerzeit angeschaut, wie das die Großen machen, und den Code meinen Bedürfnissen "angepasst".
Schaue Dir mal den Quellcode von Enurl.pm und dort die Funktion enurl_str() an, die nämlich genau das macht. Diese Funktion stammt übrigens aus CGI.pm und heißt dort escape() [Diese Weisheit basiert nicht auf meiner "jahrelangen" Beschäftigung mit Perl, sondern steht in Enurl.pm selbst ;-)]. Demnach besteht also 1. die Möglichkeit, die Funktion in Enurl.pm direkt anzusprechen {print CGI::Enurl::enurl_str($value);} bzw. {use CGI::Enurl 'enurl_str'; print enurl_str($value);} oder 2. das selbe mit CGI.pm zu machen {use CGI; print escape($value);}
Versuch das mal. Sollte das nicht funktionieren, bau die entsprechende Funktion mal direkt in Deinen Code ein und schau was dann passiert.
Was mach ich falsch?
Kann ich jetzt auf Anhieb nix zu sagen, da bei mir der String mit der extrahierten Funktion ganz normal umgewandelt wird:
Ergebnis: test+4576+%24%25&%25&%2F%21%22%22&%3B%24%25&%25%2F&%2F%28
(bei mir wird & nicht umgewandelt)
Gruß AlexBausW