String 2 url encoded
Alexander
- perl
Hi,
kann mir jemand die paar Zeilen schreiben, die man braucht um einen String in eine URL zu konvertieren (url-encoded).
Bitte keine Perl-Modul-Angabe :)
Danke im Vorraus
-Alex
Hallo Alex
kann mir jemand die paar Zeilen schreiben, die man braucht um einen String in eine URL zu konvertieren (url-encoded).
Wenn es so einfach wäre, wie es ist ;-)
Bitte keine Perl-Modul-Angabe :)
Auch wenn Du keine Modulangaben wünschst, findest Du im Modul 'Enurl.pm' genau die Zeilen, die Du benötigst. Erhältlich ist das Modul unter http://www.perl.com/CPAN-local/modules/by-module/CGI/.
Mit CGI.pm geht es imho auch. Ich kenne aber die genaue Syntax (noch) nicht, da ich gerade erst angefangen habe mich damit zu beschäftigen (keine Entschuldigung, aber ein Grund, warum ich es noch nicht benutzt habe ;-).
Gruß AlexBausW
Auch wenn Du keine Modulangaben wünschst, findest Du im Modul 'Enurl.pm' genau die Zeilen, die Du benötigst. Erhältlich ist das Modul unter http://www.perl.com/CPAN-local/modules/by-module/CGI/.
Mit CGI.pm geht es imho auch. Ich kenne aber die genaue Syntax (noch) nicht, da ich gerade erst angefangen habe mich damit zu beschäftigen (keine Entschuldigung, aber ein Grund, warum ich es noch nicht benutzt habe ;-).
Hmm, aber ich krieg das einfach nich hin :(
also bei mir sieht der (Test-)Quelltext so aus:
use CGI::Enurl;
$value = "test 4576 + $%&%&/!""&;$%&%/&/(";
print "Content-type: text/html\n\n";
print "test: ",enurl($value);
aber am Ende steht da "5".
das war's. Was mach ich falsch?
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
Hi,
Mit CGI.pm geht es imho auch. Ich kenne aber die genaue Syntax (noch) nicht,
use CGI;
print header, CGI::escape('test 4576 + $%&%&/!""&;$%&%/&/(');
Warum es mit CGI::Enurl nicht geht weiß ich nicht, das Modul kenne ich nicht. Was sagt denn perldoc CGI::Enurl?
Cheatah
Hallo Cheatah,
use CGI;
print header, CGI::escape('test 4576 + $%&%&/!""&;$%&%/&/(');
Vielen Dank für die korrekte Syntax :-). Kurz nach Dir hab` ich unten in Unwissenheit glatt eine falsche gepostet :-( *schäm*.
Warum es mit CGI::Enurl nicht geht weiß ich nicht, das Modul kenne ich nicht. Was sagt denn perldoc CGI::Enurl?
Hier ein Auszug. Demnach sollte die Syntax die Alex verwendet richtig sein, sofern ich nichts übersehen habe.
==============================
This is a little module made for CGI scripting. It encodes the parameters
to be passed to a CGI. It does nothing more, so it's much smaller and loads
more quickly.
Functions
enurl STRING
enurl ARRAY
enurl HASH
Encodes the parameter. If the parameter is a single string
it encodes it and returns the encoded form.
If it is an array or a reference to an array it encodes all
items and returns them joined by '&'.
If it is a hash it encodes the values and return a querystring in form
"key2=encoded_value1&key2=encoded_value2&...".
!!! Please note that a hash in a list context returns a list of all
keys and values. This means that if you call enurl(%hash) you will NOT
get what you may thing you should. You HAVE to use enurl(%hash) !!!
enURL STRING
Encodes the parameter, this version doesn't encode '=' and '&' characters,
so you should make sure they are not present in the data.
Notice the difference :
Wie unten schon erwähnt ist die Funktion enurl_str() aus CGI.pm übernommen.
Gruß AlexBausW
Hi,
use CGI;
print header, CGI::escape('test 4576 + $%&%&/!""&;$%&%/&/(');Vielen Dank für die korrekte Syntax :-). Kurz nach Dir hab` ich unten in Unwissenheit glatt eine falsche gepostet :-( *schäm*.
brauchst Dich nicht zu schämen, CGI::escape und CGI::unescape sind undokumentiert ;-)
Hier ein Auszug. Demnach sollte die Syntax die Alex verwendet richtig sein, sofern ich nichts übersehen habe.
Danke. Spontan kann ich jetzt auch nichts entdecken, außer vielleicht, daß möglicherweise enurl und enURL nicht in den Namespace geschrieben werden. Versuche CGI::Enurl::enurl statt dessen - klappt das?
Cheatah
Hallo Cheatah,
[...]
Spontan kann ich jetzt auch nichts entdecken, außer vielleicht, daß möglicherweise enurl und enURL nicht in den Namespace geschrieben werden. Versuche CGI::Enurl::enurl statt dessen - klappt das?
[...]
Also sollte es mit Enurl.pm so funktionieren, wie ich es unten gepostet habe. Vielleicht kann ja Alex mal sagen, ob und was funktioniert oder auch nicht funktioniert hat ;-)
Gruß AlexBausW
Hi,
kann mir jemand die paar Zeilen schreiben, die man braucht um einen String in eine URL zu konvertieren (url-encoded).
Bitte keine Perl-Modul-Angabe :)
Danke im Vorraus
-Alex
Danke werd ich alles ausprobieren.
-Alex