opi: Übergabe von Texte mit & Zeichen

Hallo,

ich komme leider absolut nicht weiter. Kann mir jemand helfen?

Die einzelnen Parameter bei der Übergabe von Argumenten an ein CGI-Skript werden ja bekanntlich mit dem &-Zeichen getrennt.

Was mache ich nun, wenn innerhalb eines Freitextes oder einer Firma ein &-Zeichen vorkommt? Meine foreach-Schleife (Perl) kommt damit überhaupt nicht zurecht... wohl berechtigt :)

Gibt es eine Möglichkeit das &-Zeichen schon vor der Übergabe an das Skript umzuwandeln? Oder wie würdet ihr das Problem lösen?

Greez,
opi

Für Syntaxfehler bitte ich um Entschuldigung!

  1. Hallo,

    use CGI;

    oder

    use CGI::Lite;

    gruss

    --
    no strict;
    no warnings;
    Der natürliche Feind der Festplatte ist der Teppich, der sich gerne mal elektrisch aufläd und der Festplatte eine wischt.
    Kluge Leute sind auch nur Menschen.
    1. Hallo Eternius,

      weshalb sollte mir use CGI; helfen sollen? Es hat bisher nicht funktioniert.

      Wenn ich in einem Formular einen Freitext eingebe, wie zum Beispiel "Müller & Seifert", dann wird doch das &-Zeichen trotzdem als Trennzeichen interpretiert.

      Der Code in meinem Perl-Skript schaut beispielsweise folgendermaßen aus:

      my @argv=split /&/,$ENV{'QUERY_STRING'};
      my %arg;
      foreach(@argv) {
         my ($name,$value)=split /=/,$_;
         $targ=~tr/+/ /;
         $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
         $arg{$name}=$value;
      }

      Greez,
      opi

      Für Syntaxfehler bitte ich um Entschuldigung!

      1. Hallo,

        sorry !

        my @argv=split /&/,$ENV{'QUERY_STRING'};
        my %arg;
        foreach(@argv) {
           my ($name,$value)=split /=/,$_;
           $targ=~tr/+/ /;
           $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
           $arg{$name}=$value;
        }

        my @argv=split /&/,$ENV{'QUERY_STRING'};
        my %arg;
        foreach(@argv) {
           my ($name,$value)=split /=/,$_;
           $value=~tr/+/ /;
           $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
           $arg{$name}=$value;
        }

        Greez,
        opi

        Für Syntaxfehler bitte ich um Entschuldigung!

      2. Hallo,

        es gibt ungefähr 13,8 Gründe dafür bei solchen Sachen auf handrolled zu verzichten.

          
        my $formdata;  
        my $cgi = new CGI::Lite;  
        %$formdata=$cgi->parse_form_data;  
        
        

        Quelle

        gruss

        --
        no strict;
        no warnings;
        Der natürliche Feind der Festplatte ist der Teppich, der sich gerne mal elektrisch aufläd und der Festplatte eine wischt.
        Kluge Leute sind auch nur Menschen.
        1. Hallo Eternius,

          Hallo,

          es gibt ungefähr 13,8 Gründe dafür bei solchen Sachen auf handrolled zu verzichten.

          entschuldige bitte, aber dem kann ich dir nicht beipflichten.

          Das Problem ist gelöst, vielen Dank für deine Mühe! :)

          Greez,
          opi

          Für Syntaxfehler bitte ich um Entschuldigung!

  2. Tag opi.

    Die einzelnen Parameter bei der Übergabe von Argumenten an ein CGI-Skript werden ja bekanntlich mit dem &-Zeichen getrennt.

    Soweit richtig.

    Was mache ich nun, wenn innerhalb eines Freitextes oder einer Firma ein &-Zeichen vorkommt? Meine foreach-Schleife (Perl) kommt damit überhaupt nicht zurecht... wohl berechtigt :)

    Nein, das ist mir eigentlich unverständlich. Normalerweise werden die als Steuerzeichen reservierten Zeichen hexadezimal umschrieben (siehe Datenstrom bei Formulardaten). Würdest du im Eingabefeld "name" die Zeichenkette "Werner & Willi" eingeben, würde daraus im Querystring "name=Werner+%26+Willi". Somit sollte es eigentlich kein Problem mit dem splitten geben. Im Zweifel lasse dir den Querystring mal unbehandelt ausgeben, damit du siehst, wie er aufgebaut ist.

    Siechfred

    --
    «Ich liebe euch doch alle!»
    1. Hallo Siechfred,

      Nein, das ist mir eigentlich unverständlich. Normalerweise werden die als Steuerzeichen reservierten Zeichen hexadezimal umschrieben

      ja du hast Recht! Das wußte ich nicht! Ich dachte, dass alle Zeichen umgewandelt werden würden, aber dem ist nicht so. Mein Fehler war, dass die Zeichen in meinem Skript vor der Schleife schon umgewandelt wurden, sodass natürlich in der Schleife mit split /&/ mehr &-Zeichen vorhanden waren.

      Danke für die Hilfe, jetzt läuft es :)

      Greez,
      opi

      Für Syntaxfehler bitte ich um Entschuldigung!