Paddy: HTML Sonderzeichen / Übergabe von Formularen

Hallo ihr ich habe folgendes Problem:

Ich habe in einer Seite eine <form> mit einem Textfeld. Das Textfeld wird nach dem submit von einer verarbeitenden Seite in mein SQL geschrieben.
Nun habe ich mir von folgender Seite einen Codefetzen zum Umwandeln von Sonderzeichen in zb '&auml ;' besorgt. siehe hier!

Jetzt habe ich folgendes Problem. Wenn ich den Code in meine Verarbeitungsseite einbaue, kommt selbige nicht mit den Übergabewerten aus dem <form> klar und verhunzt mir diese als kyptischen Text, sobald sie die Zeichen per request.getParameter wieder ausliest. Ich dachte zuerst es läge daran, dass meine Seiten nicht auf UTF-8 codiert sind, aber daran lag es leider nicht.

Meine Frage ist jetzt folgende:
Was muss ich an den übergebenen Werten ändern oder wie kann ich per JSP das Textfeld zwischen 'submit' und Ankunft bei der neuen Seite noch umbauen?

MfG
Paddy

  1. Meine Frage ist jetzt folgende:
    Was muss ich an den übergebenen Werten ändern oder wie kann ich per JSP das Textfeld zwischen 'submit' und Ankunft bei der neuen Seite noch umbauen?

    codiere sie kontext-gerecht

    für html heisst das: <, >,
    , " und & musst[1] du maskieren - sämtliche andere sonderzeichen kannst du in frieden lassen

    [1] jaja, ausnahmen :D

    1. joah... und halt noch das Hochkomma und das Apostroph

      aber wie mach ich das? ^^

      1. aber wie mach ich das? ^^

        ich hab leider keine ahnung von jsp - aber das hier hat mich keine 10 sekunden gekostet um es in der suchmaschine meiner wahl zu finden

        http://www.stratulat.com/blog/jsp-htmlspecialchars-htmlentities-php-like-function-version-20

        1. Ja ne is klar, aber soweit bin ich schon, weil der Code, den ich vorher gepostet habe genau das macht. Meine Frage war jetzt, wie ich mein Textfeld aus der Form entweder vor dem Absenden in ne Variable bekomm oder verhinder, dass der request.Parameter der nächsten Seite mir eben diesen übergabewert versaut.

          aber wie mach ich das? ^^
          ich hab leider keine ahnung von jsp - aber das hier hat mich keine 10 sekunden gekostet um es in der suchmaschine meiner wahl zu finden

          http://www.stratulat.com/blog/jsp-htmlspecialchars-htmlentities-php-like-function-version-20

          1. Ja ne is klar, aber soweit bin ich schon, weil der Code, den ich vorher gepostet habe genau das macht.

            lt deiner beschreibung codierst du sämtliche "sonderzeichen" in nummerische oder benannte referenzen

            Meine Frage war jetzt, wie ich mein Textfeld aus der Form entweder vor dem Absenden in ne Variable bekomm oder verhinder, dass der request.Parameter der nächsten Seite mir eben diesen übergabewert versaut.

            wie bereits erwähnt, ich hab keine ahnung von jsp - aber ich versteh nicht, warum ein http-post variablen "versauen" sollte

            definiere "versaut"

            1. Das problem is, dass ich die Sonderzeichen, die der draus macht hier net verlinken darf
              Also ich hab mal mein form auf get gestellt und sehe damit ja was es an die neue Seite übergibt. Oben in der Adresszeile steht jetzt zb. noch ö ä ü (ich schreibe das hier so, weil ich keine sonderzeichen verwenden darf). selbiges schreibe ich mir dann in einen String und lasse mir den ausgeben. Hier steht dann nicht mehr oe ae ue sondern ein großes AE, kringel, AE, pi, AE, ein viertel Zeichen. Also praktisch halt irgendwelche symbole aus dem Unicode. Ka woher dieser Fehler kommt.

              Ja ne is klar, aber soweit bin ich schon, weil der Code, den ich vorher gepostet habe genau das macht.
              lt deiner beschreibung codierst du sämtliche "sonderzeichen" in nummerische oder benannte referenzen

              Meine Frage war jetzt, wie ich mein Textfeld aus der Form entweder vor dem Absenden in ne Variable bekomm oder verhinder, dass der request.Parameter der nächsten Seite mir eben diesen übergabewert versaut.

              wie bereits erwähnt, ich hab keine ahnung von jsp - aber ich versteh nicht, warum ein http-post variablen "versauen" sollte

              definiere "versaut"

              1. Das problem is, dass ich die Sonderzeichen, die der draus macht hier net verlinken darf

                kannst du nicht einfach einen blindtext nehmen der geschrottet wird :)

                zb "meine öde mütter ätzt mich" an - oder irgendwas in die richtung

                selbiges schreibe ich mir dann in einen String und lasse mir den ausgeben. Hier steht dann nicht mehr oe ae ue sondern ein großes AE, kringel, AE, pi, AE, ein viertel Zeichen. Also praktisch halt irgendwelche symbole aus dem Unicode. Ka woher dieser Fehler kommt.

                du meinst diese hier: ä ö ü
                schei? encoding

                1. Jop genau diese mein ich ^^
                  Wie gesagt in der Adresszeile passt es noch und nach dem request.getParameter kommt das von dir unten verlinkte raus.

                  selbiges schreibe ich mir dann in einen String und lasse mir den ausgeben. Hier steht dann nicht mehr oe ae ue sondern ein großes AE, kringel, AE, pi, AE, ein viertel Zeichen. Also praktisch halt irgendwelche symbole aus dem Unicode. Ka woher dieser Fehler kommt.

                  du meinst diese hier: ä ö ü
                  schei? encoding

                  1. und nach dem request.getParameter kommt das von dir unten verlinkte raus.

                    ich wiederhole mich ungern: schei? encoding

                    du hast scheinbar ein problem, dass du einen utf-8 codierten string als ansi (iso-8859-1 oder ähnliches) betrachtest

                    1. Ok dann versuch ich jetzt rauszufinden, wie ich meine Seiten komplett auf UTF-8 bekomm. Danke dir

                      du hast scheinbar ein problem, dass du einen utf-8 codierten string als ansi (iso-8859-1 oder ähnliches) betrachtest

                      1. Ich glaub ich beiß in meinen Schreibtisch
                        UTF-8 Kram hab ich jetzt umgesetzt und eingebaut... ergebnis: das selbe

                        1. LÖSUNG:
                          also so lächerlich es auch klingt, ich hab die Lösung für mein Problem gefunden: Es liegt daran, dass ich das Form per get und net per post abgeschickt habe. Wenn ich das ändere, tut es.
                          Hier der Link zur Quelle: klick!

                          "
                          Probleme mit GET-Anfragen

                          Leider funktioniert der im vorigen Abschnitt vorgestellte Filter nur mit per POST übertragenen Formular-Werten korrekt. Nutzt man GET als Absende-Methode oder hängt man an die URL Parameter-Werte, so stößt man auf Probleme mit der fehlenden Standard-Konformität der Browser. Diese sollten gemäß W3C-Spezifikation GET-Parameter immer im UTF-8-Format an die Adresse anhängen.9 Wieder mal ist auch hier auf die Browser-Hersteller kein Verlass. Anstelle des Standards ist hier leider das Verhalten weit verbreitet, die Parameter in dem Encoding an die Adresse anzuhängen, das gerade vom Browser verwendet wird. Ist also die Seite in ISO-8859-1 kodiert, senden die meisten Browser auch den Anfrage-String als ISO-8859-1-kodierten String und eben nicht im standard-konformen UTF-8-Format. Aufgrund dessen, dass nicht alle Browser sich an diesen Standard halten, kann es sein, dass bei GET-Anfragen die Methode setCharacterEncoding(String) nicht das gewünschte Ergebnis bringt.
                          Im Tomcat, genauer im Coyote-Connector, kann man daher an zwei Schrauben drehen, um das gewünschte Verhalten des Containers einzustellen. Dies sind zwei optionale Attribute des Connector-Elementes in der Datei server.xml im Verzeichnis conf unterhalb des Tomcat-Root-Verzeichnisses.
                          Das eine Attribut heißt useBodyEncodingForURI. Dieses legt fest, ob für URL-kodierte Werte der Wert genutzt werden soll, der per setCharacterEncoding(String) gesetzt wird. Was auf den ersten Blick wie die gewünschte Lösung aussieht, birgt allerdings ein Problem mit dem oben genannten Standard. Nutzt ein Browser diesen Standard bei Seiten, die nicht UTF-8-kodiert sind, funktioniert diese Einstellung nicht.
                          Das andere Attribut heißt URIEncoding. Dieses legt fest, welches Standard-Encoding für URL-kodierte Werte angenommen werden soll. Standardmäßig wird hier ISO-8859-1 angenommen. Dies entspricht dem Standard-Encoding, das gemäß Servlet-Spec genutzt werden soll, wenn setCharacterEncoding(String) nicht aufgerufen wird. Mit dem Standard-Wert ISO-8859-1 läuft man aber erneut Gefahr, dass die Seite bei Browsern, die sich standard-konform verhalten und die Werte mit UTF-8 kodieren, nicht korrekt funktioniert. Die Tomcat-Entwicklerinnen sitzen hier in einer Klemme zueinander inkompatibler Spezifikationen. Hier ist wünschenswert, dass die Servlet-Spezifikation dem W3C-Standard folgt und UTF-8 zum Standard URL-kodierter Werte macht. Leider ist dies auch im vorliegenden "Final Public Draft" der Servlet-Spezifikation 2.5 noch nicht der Fall!
                          Auch diese Problematik stärkt unser Argument für die durchgängige Verwendung von UTF-8. Setzt man das erste Attribut auf "false"10 und das zweite auf UTF-8, so funktioniert das mit allen Browsern, da diese sich - ob sie sich nun bei anderem Encoding standard-konform verhalten oder nicht - bei UTF-8 korrekt verhalten. Bei UTF-8 und den hier empfohlenen Werten im Connector-Element der Tomcat-Konfigurationsdatei funktioniert der obige Filter dann auch bei GET-Anfragen korrekt. Leider aber wirklich nur dann.
                          "

            2. Das problem is, dass ich die Sonderzeichen, die der draus macht hier net verlinken darf
              Also ich hab mal mein form auf get gestellt und sehe damit ja was es an die neue Seite übergibt. Oben in der Adresszeile steht jetzt zb. noch ö ä ü. selbiges schreibe ich mir dann in einen String und lasse mir den ausgeben. Hier steht dann nicht mehr ö ä ü sondern ein großes Ä, kringel, Ä, pi, Ä, ein viertel Zeichen. Also praktisch halt irgendwelche symbole aus dem Unicode. Ka woher dieser Fehler kommt.

              Ja ne is klar, aber soweit bin ich schon, weil der Code, den ich vorher gepostet habe genau das macht.
              lt deiner beschreibung codierst du sämtliche "sonderzeichen" in nummerische oder benannte referenzen

              Meine Frage war jetzt, wie ich mein Textfeld aus der Form entweder vor dem Absenden in ne Variable bekomm oder verhinder, dass der request.Parameter der nächsten Seite mir eben diesen übergabewert versaut.

              wie bereits erwähnt, ich hab keine ahnung von jsp - aber ich versteh nicht, warum ein http-post variablen "versauen" sollte

              definiere "versaut"