Gustl: Heute die Zweite: parameterübergabe mit listentrennern

hi, also ich bekomme viele parameter in einem get-string geliefert:

https://example.com/cgi-bin/abc.pl?p1=bla&p2=foo;bar;baz;bazi;lausbub;goere

wieso kann ich den paramter 2 nicht mit $p2=param("p2"); einlesen? in p2 steht nur foo, der rest wird nicht übergeben. ich dachte ich hätte das schon mal so gemacht und da ging es.

aber ich bin heute blöd, zuviel perl. wie muss ich p2 einlesen damit ich den string incl. den ; listentrennern erhalte und dann @doof=split(/;/,$p2); kann?

vielen dank für eure hilfe!

--
Theorie: Alles ist möglich - Praxis: Nix funzt - Ich bin eben ein Mann der Praxis

--
GUSTL
  1. wieso kann ich den paramter 2 nicht mit $p2=param("p2"); einlesen? in p2 steht nur foo, der rest wird nicht übergeben. ich dachte ich hätte das schon mal so gemacht und da ging es.

    Weil sowohl das & alsauch das ; (afaik konfigurationsabhängig) die Werte in einem Querystring separieren kann.

    p1=bla&p2=foo;bar;baz;bazi;lausbub;goere

    ist gleichbedeutend zu

    p1=bla;p2=foo;bar;baz;bazi;lausbub;goere
    oder
    p1=bla&p2=foo&bar&baz&bazi&lausbub&goere

    1. Nachtrag: in der HTML-4.01-Doku wird sogar empfohlen, man solle bevorzugt den Strichpunkt verwenden.

      In PHP lässt sich das verhalten mit "arg_separator.input" einstellen - das steht per default auf "&" - wie man das in Perl einstellt oder ob das dort Standardverhalten ist, weiß ich aber nicht.

    2. Weil sowohl das & alsauch das ; (afaik konfigurationsabhängig) die Werte in einem Querystring separieren kann.

      p1=bla&p2=foo;bar;baz;bazi;lausbub;goere

      ist gleichbedeutend zu

      p1=bla;p2=foo;bar;baz;bazi;lausbub;goere
      oder
      p1=bla&p2=foo&bar&baz&bazi&lausbub&goere

      du bestätigst meine vermutung. das würde aber heissen ich bring den paramter p2 überhaupt nicht rein ... das ist blöd.

      bleibt nur übrig die werte in p2 als einzelparamter zu senden bzw. einen anderen listentrenner zu benutzen. vielleicht ginge #.

      oder hat jemand eine lösung wie ich den paramter reinbekomme wie er derzeit ist?

      --
      Theorie: Alles ist möglich - Praxis: Nix funzt - Ich bin eben ein Mann der Praxis

      --
      GUSTL
      1. du bestätigst meine vermutung. das würde aber heissen ich bring den paramter p2 überhaupt nicht rein ... das ist blöd.

        Sicher, du musst ihn nur kontextgerecht behandelt - wenn du in einem Parameter ein & im Wert verwenden möchtest, musst du es auch maskieren.

        RFC 2396 "Within a query component, the characters ";", "/", "?", ":", "@", "&", "=", "+", ",", and "$" are reserved."

        oder hat jemand eine lösung wie ich den paramter reinbekomme wie er derzeit ist?

        Hat hotti schon genannt.

        1. du bestätigst meine vermutung. das würde aber heissen ich bring den paramter p2 überhaupt nicht rein ... das ist blöd.

          Sicher, du musst ihn nur kontextgerecht behandelt - wenn du in einem Parameter ein & im Wert verwenden möchtest, musst du es auch maskieren.

          RFC 2396 "Within a query component, the characters ";", "/", "?", ":", "@", "&", "=", "+", ",", and "$" are reserved."

          oder hat jemand eine lösung wie ich den paramter reinbekomme wie er derzeit ist?

          Hat hotti schon genannt.

          anscheindend gibts noch mehr:

          reserved      = ":" / "/" / "?" / "#" / "[" / "]" / "@"
                             "!" / "$" / "&" / "'" / "(" / ")"
                           / "*" / "+" / "," / ";" / "="

          --
          Theorie: Alles ist möglich - Praxis: Nix funzt - Ich bin eben ein Mann der Praxis

          --
          GUSTL
          1. anscheindend gibts noch mehr:

            reserved      = ":" / "/" / "?" / "#" / "[" / "]" / "@"
                               "!" / "$" / "&" / "'" / "(" / ")"
                             / "*" / "+" / "," / ";" / "="

            Jep, das hab ich gesucht (RFC 3986, Appendix A):

            pct-encoded   = "%" HEXDIG HEXDIG

            unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
               reserved      = gen-delims / sub-delims
               gen-delims    = ":" / "/" / "?" / "#" / "[" / "]" / "@"
               sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
                             / "*" / "+" / "," / ";" / "="

  2. hi,

    https://example.com/cgi-bin/abc.pl?p1=bla&p2=foo;bar;baz;bazi;lausbub;goere

    Du möchtest, dass in einer Komponente (Parameter p2) das Zeichen ";" vorkommt, dann musst Du es escapen.

      
    use URI::Escape;  
    print uri_escape ";"; # %3B  
    
    

    Hotti

    1. hi again,

      Du möchtest, dass in einer Komponente (Parameter p2) das Zeichen ";" vorkommt, dann musst Du es escapen.

      use URI::Escape;
      print uri_escape ";"; # %3B

        
      oder gleich alles zusammen in uri\_escape('foo;bar;baz;bazi;lausbub;goere;horst;hotti') ;-)  
        
      Hotti
      
      1. oder gleich alles zusammen in uri_escape('foo;bar;baz;bazi;lausbub;goere;horst;hotti') ;-)

        Hotti´

        ich kapier die schreibweise beim einlesen jetz nicht:

        use URI::Escape;
        my $p2 = uri_escape( param("p2") );

        so richtig? so einfach?

        --
        Theorie: Alles ist möglich - Praxis: Nix funzt - Ich bin eben ein Mann der Praxis

        --
        GUSTL
        1. oder gleich alles zusammen in uri_escape('foo;bar;baz;bazi;lausbub;goere;horst;hotti') ;-)

          Hotti´

          ich kapier die schreibweise beim einlesen jetz nicht:

          use URI::Escape;
          my $p2 = uri_escape( param("p2") );

          so richtig? so einfach?

          Nein, das musst du beim erzeugen des Links machen.

          1. oder gleich alles zusammen in uri_escape('foo;bar;baz;bazi;lausbub;goere;horst;hotti') ;-)

            Hotti´

            ich kapier die schreibweise beim einlesen jetz nicht:

            use URI::Escape;
            my $p2 = uri_escape( param("p2") );

            so richtig? so einfach?

            Nein, das musst du beim erzeugen des Links machen.

            ich erzeuge den link ja nicht. steh ich jetzt total aufm schlauch?

            hotti, gnade! ich brauch heute erlösung! wie lese ich p2 ein???

            --
            Theorie: Alles ist möglich - Praxis: Nix funzt - Ich bin eben ein Mann der Praxis

            --
            GUSTL
            1. Nein, das musst du beim erzeugen des Links machen.

              ich erzeuge den link ja nicht.

              Dann sag dem Deppen der ihn erzeugt, er soll die Syntaxregeln für URLs beachten.

              1. Nein, das musst du beim erzeugen des Links machen.

                ich erzeuge den link ja nicht.

                Dann sag dem Deppen der ihn erzeugt, er soll die Syntaxregeln für URLs beachten.

                »»

                ok, werd ich machen :-)

                ich gebs für heute auf

                --
                Theorie: Alles ist möglich - Praxis: Nix funzt - Ich bin eben ein Mann der Praxis

                --
                GUSTL
              2. Dann sag dem Deppen der ihn erzeugt, er soll die Syntaxregeln für URLs beachten.

                Der Depp hat sich selbst als solcher geoutet und übergibt die Parameter jetzt in Einzelwerten, schön der Reihe nach mit netten Namen.

                Der Philosoph sprach: Wer aber glaubt kein Depp zu sein, der ist ein Depp.

                1. Der Philosoph sprach: Wer aber glaubt kein Depp zu sein, der ist ein Depp.

                  Natürlich :) Wer glaubt alles zu Wissen, weiß in Wirklichkeit nichts.

                  1. Der Philosoph sprach: Wer aber glaubt kein Depp zu sein, der ist ein Depp.

                    Natürlich :) Wer glaubt alles zu Wissen, weiß in Wirklichkeit nichts.

                    wenn er alles wissen würde, dann würde er auch wissen dass er ein depp ist :) ich glaube das nennt man eine endlosschleife, oder?

                    jetz aber schluss mit der viel-o-sofie