michael: Leerzeichen bei GET (Formular)

Hi,

Wenn ich ein Formular via GET verschicke, dann werden die Leerzeichen aus den Textfeldern durch ein + ersetzt (...a.html?msg=hallo+michael). Das Ziel ist eine stink normale HTML-Datei, in der ich den Query-String (location.search) via JavaScript auswerte. Gibt es eine JavaScript-Funktion mit der ich den Search-String wieder in den originalen (mit Leerzeichen) Zustand versetzten kann? Normalerweise über decodeURIComponent, aber da bekomme ich die Meldung, dass nicht kodiert wurde (encodeURIComponent). Ist von der Sache her ja nicht verkehrt aber ich raff das einfach nicht. Muss ich denn all meine Textfelder vor dem Versenden, via GET, kodiert damit ich dann das wieder in einem anderen Dok via JavaScript dekodieren kann? Ich kann mir nicht vorstellen dass es so kompliziert ist. Gibt es denn dafür keine Funktion?

michael

  1. Hi,

    Wenn ich ein Formular via GET verschicke, dann werden die Leerzeichen aus den Textfeldern durch ein + ersetzt (...a.html?msg=hallo+michael).

    auch %20 wäre korrekt, d.h. im Zweifel muss damit gerechnet werden.

    Gibt es eine JavaScript-Funktion mit der ich den Search-String wieder in den originalen (mit Leerzeichen) Zustand versetzten kann?

    http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm nennt noch mehr Methoden als decodeURIComponent(). Einfach mal etwas vom Begriff "URI" trennen :-)

    Cheatah

    1. Hi,

      Also irgendwie habe ich den Eindruck als wenn ich momentan einfach nur ... bin. Ich raff das einfach nicht. Es stehen mir drei Funktionen für eine Umwandlung zur Verfügung.

      (grob)
      1. escape (xyz) (Steuerzeichen mit den ASCII-Werten 0 bis 31 und Sonderzeichen)
      2. encodeURI (xyz) (Sonderzeichen in ASCII-Zeichensequenzen)
      3. encodeURIComponent (xyz) (Sonderzeichen in ASCII-Zeichensequenzen )

      Um das wieder zurückzuwandeln stehen die passenden Funktionen unescape, decodeURI und decodeURIComponent zur Verfügung.

      Wenn ich aber ein Formular via GET abschicke, dann rufe ich ja nicht extra eine dieser Funktionen auf sondern schicke es einfach los. Jetzt hab ich aber das Problem, dass keine der Funktionen zur Rückumwandlung greift, sprich im Zieldokument immer das + anstelle von einem Leerzeichen ist. Ich versteh die Welt nicht mehr... ich raff das einfach nicht....

      Gibt es eine JavaScript-Funktion mit der ich den Search-String wieder in den originalen (mit Leerzeichen) Zustand versetzten kann?
      http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm nennt noch mehr Methoden als decodeURIComponent(). Einfach mal etwas vom Begriff "URI" trennen :-)

      Habe ich natürlich auch schon gelesen, darum schäme ich mich ja  schon richtig... ich glaube ich brauch Urlaub...

      Falls es jemanden interessiert und er mir das Licht am Ende des Tunnels zeigen möchte oder einfach nur den Tunnel wo vielleicht Licht am Ende ist : hier liegen meine Testseiten http://www.plectranthus.de/pwp/GetTest/index.html.

      michael

      1. Hi,

        Also irgendwie habe ich den Eindruck als wenn ich momentan einfach nur ... bin.

        lass mich raten: "müde"?

        1. escape (xyz) (Steuerzeichen mit den ASCII-Werten 0 bis 31 und Sonderzeichen)

        Reicht das nicht?

        Wenn ich aber ein Formular via GET abschicke, dann rufe ich ja nicht extra eine dieser Funktionen auf sondern schicke es einfach los.

        Genau. Die Kodierung übernimmt der Browser - identisch (oder identisch genug) mit escape().

        Jetzt hab ich aber das Problem, dass keine der Funktionen zur Rückumwandlung greift, sprich im Zieldokument immer das + anstelle von einem Leerzeichen ist.

        Stand im Eingabefeld ein "+"? Dann ist das richtig so - und alles andere falsch.

        http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm nennt noch mehr Methoden als decodeURIComponent(). Einfach mal etwas vom Begriff "URI" trennen :-)
        Habe ich natürlich auch schon gelesen, darum schäme ich mich ja  schon richtig...

        Du brauchst Dich nicht zu schämen. Oft übersieht man etwas; der Hinweis, dass es _doch_ dort zu finden ist, reicht dann meist aus.

        ich glaube ich brauch Urlaub...

        Geh erst mal schlafen. Morgen mit frischer Kraft wieder ans Werk.

        Cheatah

        1. Moin moin!

          Wenn ich aber ein Formular via GET abschicke, dann rufe ich ja nicht extra eine dieser Funktionen auf sondern schicke es einfach los.
          Genau. Die Kodierung übernimmt der Browser - identisch (oder identisch genug) mit escape().

          Das ist das Problem. unescape() verwandelt die + nicht zurueck in Leerzeichen. Keine gute Sache das. Man muss erst eine Ersetzung der + in Leerzeichen machen, und dann unescape() den Rest erledigen lassen. (Und die Reihenfolge *nicht* umdrehen!)

          So long

          --
          Black holes are where god divided by zero.

          1. Hi,

            Das ist das Problem. unescape() verwandelt die + nicht zurueck in Leerzeichen.

            oh, das wusste ich nicht. Danke für diese Info und Korrektur.

            Keine gute Sache das.

            Allerdings... *örgs*

            Black holes are where god divided by zero.

            "Wenn das Leben eine Simulation wäre, müssten wir das doch merken. Da, wo viel berechnet werden muss, müsste doch auch die Zeit langsamer vergehen oder so was - zum Beispiel bei schwarzen Löchern. Oh..."

            Cheatah ;-)

            1. Hi,

              Und ich danke dir für den Tipp mit dem Schlaf, sonst wär ich wahrscheinlich durchgedreht;). Dein gutes Zureden hat mir echt geholfen.

              Das Schlimme an der ganzen Sache ist, dass es sogar einen Feature-Artikel mit einem Workaround dazu gibt und ich den erst jetzt gelesen habe http://aktuell.de.selfhtml.org/artikel/javascript/wertuebergabe-2/index.htm.

              michael
              (wieder die Ruhe in Person)

            2. Black holes are where god divided by zero.

              "Wenn das Leben eine Simulation wäre, müssten wir das doch merken. Da, wo viel berechnet werden muss, müsste doch auch die Zeit langsamer vergehen oder so was - zum Beispiel bei schwarzen Löchern. Oh..."

              Hehe. *g* Naja, wenn ich so eine Simulation schreiben wuerde, dann wuerde ich eine absolute invariante Zeit einfuehren, die es in unserem Universum nicht gibt (aber dafuer haben wir ja eine invariante Lichtgeschwindigkeit, ist doch auch was *g*). Dann gaeb's nicht solchen Heckmeck mit Zeit mal schneller und mal langsamer. Dann wuerde aber auch bei Engpaessen in der Rechenkapazitaet alles genauso langsam berechnet werden, infolgedessen keiner was merken.

              Aber waere eigentlich mal ganz interessant, einen Action shooter zu basteln, in dem die Lichtgeschwindigkeit auf sowas zwischen 5 und 10 m/s und invariant zwischen den Bezugssystemen definiert ist, und dann die ganze Spezielle RT konsequent durchziehen...

              So long

              --
              Einfache Maschinen brauchen einfache Bedienoberflaechen - Command line interpreter fuer Fahrkartenautomaten!