marcel: string übergabe an perl script (Problem mit Leerzeichen)

hallo
ich übergebe aus einem formular einzelne strings an ein perl script. diese strings werde dann innerhalb des perl scripts mit hilfe eines hashs auf einzelne werte abgebildet. im falle von strings ohne leerzeichen funktioniert dies ohne probleme (z.b. "Eintrag1". Sobald ich aber ein String (z.B. "Erster Eintrag") übergebe wird im Perl script "Erster%20Eintrag" eingelesen. Die Frage ist nun: Wie kann ich nun den mit "Erster%20Eintrag" gekoppelten wert direkt ansprechen? (so wie es im folgenden beispiel notiert ist funktioniert es nicht).

%Einträge= ("Eintrag1","#000044","Erster%20Eintrag","#000000");

vielen dank im voraus.

  1. Hallo Marcel,

    gib' doch in dem <FORM ...></FORM>-Tag bei deneim Formular den Encode-Type "text/plain" an, dann sollte es mit Leerzeichen auch funktionieren. Das sieht dann in etwa so aus:

    <FORM ACTION="/cgi-bin/blah.pl" METHOD="post" ENCTYPE="text/plain">
    ...
    </FORM>

    Grüße,
       Florian Auer

  2. Moin

    im falle von strings ohne leerzeichen funktioniert dies ohne probleme (z.b. "Eintrag1". Sobald ich aber ein String (z.B. "Erster Eintrag") übergebe wird im Perl script "Erster%20Eintrag" eingelesen.

    Ja, Sonderzeichen, die nicht in URLs vorkommen duerfen, werden durch ein % gefolgt vom hexadezimalen ASCII-Wert des Zeichens codiert. Ebenso Zeichen, die in URLs Sonderbedeutungen haben, z.B. @ -> %40, / -> %2F, & -> %26 usw.

    Die Frage ist nun: Wie kann ich nun den mit "Erster%20Eintrag" gekoppelten wert direkt ansprechen?

    $value =~ tr/+/ /;
    $value =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/ge;

    (Mit der ersten Zeile werden + in Leerzeichen verwandelt, da manchmal ein Leerzeichen nicht mit %20, sondern mit + coiert wird.)

    Du musst darauf achten, welchen Teil Du so bearbeitest. Fuehrst Du das global ueber den ganzen Querystring (bzw. die von STDIN gelesenen Daten) aus, verwandelst Du auch evtl. vorhandene %26 zurueck nach &, weshalb ein spaeteres split() auch an diesen Stellen splitten wuerde. Aehnliches gilt fuer = Zeichen. Also *erst* splitten, dann unescapen (so nennt man das).

    Bye, Calocybe

  3. Hi,

    ich übergebe aus einem formular einzelne strings an ein perl script.

    ein CGI-Script? In dem Fall benutze einfach das Modul CGI.pm, und Du brauchst Dich um absolut gar nichts mehr zu kümmern:

    use CGI ':standard';
    print header(), param('Eintrag1');

    Übrigens solltest Du auf Leerzeichen im Formularfeld_namen_ auf jeden Fall verzichten.

    Cheatah