thomas.oetinger: encode URL von Form-Textfelder

Hallo,

ich benutze folgendes javascript:

function setURL(){
        strTitel     =  document.maske.titel.value;
        strPerson    =  document.maske.person.value;
        strAbteilung =  document.maske.abteilung.value;
        var strURL = new String ("index.htm?sek=c_seknav.htm$con=http://intra1.de/servlet/c1_abfrage?titel="+strTitel+"&person="+strPerson+"&abteilung="+strAbteilung);
        parent.location.href = strURL;
}

Die drei Strings werden aus einem Formular ausgelesen. Leider kann ich aus technischen Gründen die Form nicht mit Action abschicken, sondern möchte über die Angabe der einer URL mein Servlet ansprechen. Leider sind die drei Parameter strTitel, strPerson und strAbteilung nicht URL fähig, d.h. sie enthalten Sonderzeichen wie Leerzeichen und Klammern.

Wie kann ich in JavaScript meine zusammen gebauten URL-String URL-fähig machen?

Vielen Dank

Thomas

  1. Hallo Thomas,

    Die drei Strings werden aus einem Formular ausgelesen. Leider kann ich aus technischen Gründen die Form nicht mit Action abschicken, sondern möchte über die Angabe der einer URL mein Servlet ansprechen. Leider sind die drei Parameter strTitel, strPerson und strAbteilung nicht URL fähig, d.h. sie enthalten Sonderzeichen wie Leerzeichen und Klammern.

    Wie kann ich in JavaScript meine zusammen gebauten URL-String URL-fähig machen?

    Passe dir dieses Script einfach für deine Bedürfnisse an
    <../../sfarchiv/1999_1/t02280.htm#a10577>

    Viele Grüße

    Antje

  2. Hi!

    Wie kann ich in JavaScript meine zusammen gebauten URL-String URL-fähig machen?

    Dazu gibt es die top level function (also nicht zu einem Objekt zugehoerig) escape(). (http://developer.netscape.com/docs/manuals/js/client/jsref/toplev.htm#1063743). Aber nicht den gesamten String escapen, sondern jeden Teilstring einzeln! Also:

    var strURL = "index.htm?sek=c_seknav.htm$con=http://intra1.de/servlet/c1_abfrage?titel=" + escape(strTitel) + "&person=" + escape(strPerson) + "&abteilung=" + escape(strAbteilung);

    Seltsamerweise codiert diese Funktion ein + nicht zu %2B, sondern laesst es, wie es ist. Von CGI-Scripts wird ein + aber im allgemeinen zu einem Leerzeichen decodiert. Falls Du mit so einer URL also so ein CGI-Script aufrufen willst, musst Du zusaetzlich *nach* dem escape() noch alle + durch %2B ersetzen. Sieht dann so aus:

    var strURL = "index.htm?sek=c_seknav.htm$con=http://intra1.de/servlet/c1_abfrage?titel=" + escape(strTitel).replace(/+/g, "%2B") + "&person=" + escape(strPerson).replace(/+/g, "%2B") + "&abteilung=" + escape(strAbteilung).replace(/+/g, "%2B");

    Da es String.replace() (http://developer.netscape.com/docs/manuals/js/client/jsref/string.htm#1194258) erst seit JavaScript1.2 gibt, musst Du stattdessen eine Funktion wie die von Antje verlinkte verwenden, wenn Dir die JS1.0-Kompatibilitaet wichtig ist.

    Wenn Du aber scheinbar nur eine andere HTML-Seite aufrufst und dort mit JS den die URL weiterverarbeitest, kannst Du die Geschichte mit dem + vergessen. Dort verwendest Du naemlich einfach unescape(), welches ein + natuerlich *nicht* zum Leerzeichen decodiert.

    HTH (hope that helps), und dass es nicht zuviel auf einmal war,
    Calocybe