Ra's al PHP: AJAX / Problem mit Strings in einer Textarea (Sonderzeichen u.ä)

ahoi ahoi,

ich lade alle 2 Sekunden via AJAX diverse Servermeldungen herunter und zeige sie in einer Textarea an. Serverseitig rufe ich ein PHP Script auf und lasse mir alle aktuellen Meldungen (z.B. "Aktualisiere DB... ", "L&ouml;sche User ..." usw.) aus einem Array zurückgeben. In diesem Script verkette ich stumpf alle aktuellen Meldungen mit <br> oder /n, sodaß ich auf dem Client die einzelnen Meldungen in jeweils einer neuen Zeile angezeigt bekomme. Nur leider klappt das nicht. In der Textarea werden weder Umlaute noch Zeilenumbrüche dargestellt. Die Zeichenkette die in PHP z.B. wie folgt erstellt wurde :
"Aktualisiere DB... "<br>/n"L&ouml;sche User ..."
wird in der Textarea GENAUSO dargestellt :(

Auf der "HTML" Seite hab ich im HEAD folgende Codierung angegeben :
<meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />
kennt jemand das Problem und/oder hat eine Lösung für mich?

Gruß
RAP

  1. Moin!

    ich lade alle 2 Sekunden via AJAX diverse Servermeldungen herunter und zeige sie in einer Textarea an. Serverseitig rufe ich ein PHP Script auf und lasse mir alle aktuellen Meldungen (z.B. "Aktualisiere DB... ", "L&ouml;sche User ..." usw.) aus einem Array zurückgeben. In diesem Script verkette ich stumpf alle aktuellen Meldungen mit <br> oder /n, sodaß ich auf dem Client die einzelnen Meldungen in jeweils einer neuen Zeile angezeigt bekomme. Nur leider klappt das nicht. In der Textarea werden weder Umlaute noch Zeilenumbrüche dargestellt. Die Zeichenkette die in PHP z.B. wie folgt erstellt wurde :
    "Aktualisiere DB... "<br>/n"L&ouml;sche User ..."
    wird in der Textarea GENAUSO dargestellt :(

    Du hast zwei Probleme.

    1. Textareas zeigen NIE irgendwelche HTML-Tags an, auch kein <br>. Alle dort hineingegebenen HTML-Tags werden immer als Quelltext angezeigt.

    Lösung: Wenn du Zeilenumbrüche haben willst, nimm Newlines.

    2. Mit dem AJAX-Request findet keine Umcodierung von Entities in echtes Zeichen statt. Dein Javascript empfängt die Zeichen "&, o, u, m, l, ;", packt die in die Textarea, und die werden dort dann dargestellt. Nirgends findet eine automatische Wandlung in das "ö" statt, weil das in Javascript nicht vorgesehen ist.

    Lösung: Wenn du Umlaute haben willst, nutze keine Entities, sondern das Zeichen direkt in der angegebenen Codierungsform, die dein AJAX versteht. Das kann dich unter Umständen dazu zwingen, UTF-8 zu benutzen.

    - Sven Rautenberg

      1. Textareas zeigen NIE irgendwelche HTML-Tags an, auch kein <br>. Alle dort hineingegebenen HTML-Tags werden immer als Quelltext angezeigt.
        Lösung: Wenn du Zeilenumbrüche haben willst, nimm Newlines.

      Wenn du damit \n meinst, klappt das leider auch nicht. Wenn ich via PHP die Strings in der Form :
      nachricht1 \n nachricht2
      übertrage, bleibts leider auch bei o.g. Verhalten. Zeilenumbrüche werden auch mit \n nicht dargestellt. Wenn ich zum Testen allerdings NUR via clientseitigem Javascript o.g. Zeile in die Textarea packe, klappt der Zeilenumbruch auch mit \n :( *confused

      1. Zeilenumbrüche werden auch mit \n nicht dargestellt. Wenn ich zum Testen allerdings NUR via clientseitigem Javascript o.g. Zeile in die Textarea packe, klappt der Zeilenumbruch auch mit \n :( *confused

        Wie schreibst du den String in die Textarea?

        Mathias

        1. »» Zeilenumbrüche werden auch mit \n nicht dargestellt. Wenn ich zum Testen allerdings NUR via clientseitigem Javascript o.g. Zeile in die Textarea packe, klappt der Zeilenumbruch auch mit \n :( *confused

          Wie schreibst du den String in die Textarea?

          Mathias

          So :
          document.getElementById("meineTextarea").value = httpRequestObject.responseText;

          In "httpRequestObject.responseText" ist dann der via AJAX übertragene Text enthalten.

          Gruß
          RAP

          1. hi,

            document.getElementById("meineTextarea").value = httpRequestObject.responseText;

            In "httpRequestObject.responseText" ist dann der via AJAX übertragene Text enthalten.

            Die Zauberformel heißt URI escape. Damit klappts auch mit Newlines.

            Schönen Sonntag,
            Hotte

            --
            Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
            1. Die Zauberformel heißt URI escape. Damit klappts auch mit Newlines.

              Schönen Sonntag,
              Hotte

              Eine erste Google Recherche hat mich doch eher verwirrt?
              Muss ich da jetzt serverseitig ran mit urlencode() und/oder clientseitig mit escape()? ... Dieses URL Encoding macht mich immer schrecklich nervös. Das endet bei mir immer eher in try and error ... und dann meist error :( ... ;)
              Gibts dazu ne Patentlösung oder muss ich heute tatsächlich sämtliche PHP/Javascript Manuals dieser Welt lesen?
              Damit der Sonntag auch wirklich schön wird, würd ich ne Patentlösung vorziehen :))

              Gruß
              PHP

              1. Moin!

                »» Die Zauberformel heißt URI escape. Damit klappts auch mit Newlines.
                »»
                »» Schönen Sonntag,
                »» Hotte

                Eine erste Google Recherche hat mich doch eher verwirrt?

                Liegt daran, dass Hotte hier falsch liegt.

                Muss ich da jetzt serverseitig ran mit urlencode() und/oder clientseitig mit escape()? ... Dieses URL Encoding macht mich immer schrecklich nervös. Das endet bei mir immer eher in try and error ... und dann meist error :( ... ;)

                Der Weg vom Server zum Javascript erfordert kein Encoding oder Maskieren von Sonderzeichen, lediglich korrekte Angaben zum verwendeten Zeichen-Encoding - vorzugsweise UTF-8.

                Der Weg vom Javascript zurück zum Server erfordert korrekte Behandlung der Zeichen im jeweiligen Kontext. Die Verwendung in der URL beispielsweise Behandlung durch http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#encode_uri_component@title=encodeURIcomponent(). Schlauerweise überlässt man diese Arbeiten der AJAX-Engine der eingebundenen Javascript-Universalbibliothek, und übergibt nur ein Array oder Objekt mit den zu übertragenden Werten. :)

                Gibts dazu ne Patentlösung oder muss ich heute tatsächlich sämtliche PHP/Javascript Manuals dieser Welt lesen?

                Es ist nie verkehrt, was zu wissen. Lesen bildet.

                - Sven Rautenberg

                1. Moin!

                  »» »» Die Zauberformel heißt URI escape. Damit klappts auch mit Newlines.
                  »» »»
                  »» »» Schönen Sonntag,
                  »» »» Hotte
                  »»
                  »» Eine erste Google Recherche hat mich doch eher verwirrt?

                  Liegt daran, dass Hotte hier falsch liegt.

                  die Begriffe URI encode/decode und URI escape/unescape sind historisch gewachsen, beschreiben jedoch den gleichen Vorgang bestimmte Zeichen in einem URI RFC-gerecht umzuwandeln/zurückzuwandeln. Tut mir leid, ist nicht meine Schuld.

                  Hotte

                  --
                  Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
                  1. die Begriffe URI encode/decode und URI escape/unescape sind historisch gewachsen, beschreiben jedoch den gleichen Vorgang bestimmte Zeichen in einem URI RFC-gerecht umzuwandeln/zurückzuwandeln. Tut mir leid, ist nicht meine Schuld.

                    Häh?

                    Es ging darum, dass Newlines aus einer Ajax-Response beim Schreiben in eine Textarea verloren gehen.

                    Was hat das mit Escaping zu tun und inwiefern denkst du, dass das beim Problem helfen könnte?

                    Mathias

              2. hi,

                »» Die Zauberformel heißt URI escape. Damit klappts auch mit Newlines.
                »»
                »» Schönen Sonntag,
                »» Hotte

                Eine erste Google Recherche hat mich doch eher verwirrt?

                Da hast Du Glück, soeben habe ich einen neuen Artikel fertiggestellt:

                Loggen mit Ajax

                In diesem Artikel findest Du viele, ja sehr viele Details zum Thema URIencode, escape und Zeichenkodierung utf-8.

                Hilfreich dürfte auch dieser Artikel sein, da führt auch ein Link zu einem Testscript was weitere Informationen zu Ajax hinsichtlich Zeichenkodierung vermittelt.

                Btw., Ajax != UTF-8

                URI-Encoding und Zeichenkodierung sind verschiedene Dingens.

                Schönen Sonntag,
                Hotte

                --
                Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.