Alexander: String 2 url encoded

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

  1. 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

    1. 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?

      1. 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

    2. 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

      1. 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 :

        enurl 'a&b=f o o'   =>   'a%26b%3Df+o+o'
        enURL 'a&b=f o o'   =>   'a&b=f+o+o'

        Wie unten schon erwähnt ist die Funktion enurl_str() aus CGI.pm übernommen.

        Gruß AlexBausW

        1. 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

          1. 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?

            [...]

            In den eigenen Namespace sollten beide Funktionen exportiert werden. Nur enurl_str() muß explizit exportiert werden.
            =====Exporter aus Enurl.pm==========
            @EXPORT = qw(&enurl &enURL);
            @EXPORT_OK = qw(&enurl &enURL &enurl_str);

            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

  2. 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