Martin Hein: Sonderzeichen

Hallo Forum,

in eine Eingabefeld einer komplexen Anwendung wird folgendes
eingegeben:

<field label="Ich w&#252;nsche einen pers&#246;nlichen Be

(Unicode-Maskierung ?)

Diese Eingabe wird in einer Art und Weise weiterverarbeitet,
die unbekannt ist und die ich soweit nicht beeinflussen kann.

Im Browser kommt folgendes an:

Ich wünsche einen persönlichen Be

Meine Frage:
------------

1. Ist es der Browser selbst, der im Quelltext aus dem "&#252;"
ein "ü" macht ?

2. Ist es, abgesehen davon, ob die Ausgabe richtig ist,
ein Fehler ?

danke und

beste gruesse,
martin

  1. Moin!

    <field label="Ich w&#252;nsche einen pers&#246;nlichen Be

    (Unicode-Maskierung ?)

    Nicht wirklich.

    Der Zeichensatz von HTML ist Unicode, d.h. alle in Unicode definierten Zeichen können in irgendeiner Form in HTML vorkommen und müssen vom Browser verarbeitet werden können (ob der sie auch sinnvoll darstellen kann, also als vernünftiges Schriftzeichen, ist eine andere Frage).

    Die Nummerncodes in deinem Extrakt sind numerische Zeichenreferenzen. Die Ziffernfolge ist die dezimale Darstellung des Unicode-Codepoints. Und das ist für das kleine Ü eben 252, das kleine Ö hat 246. Das Eurozeichen wäre 8364.

    1. Ist es der Browser selbst, der im Quelltext aus dem "&#252;"
      ein "ü" macht ?

    Ja, das muß er. Die numerische Zeichenreferenz ist eine Form der Codierung neben vielen anderen.

    1. Ist es, abgesehen davon, ob die Ausgabe richtig ist,
      ein Fehler ?

    Absolut nicht.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Moin,

      ok, dann muss ich mein Script anpassen.

      in meinem Browser-Quelltext steht folgendes :

      <input ... onmouseover="javascript:showQuickTipp('Geben Sie bitte die gewünschte Uhrzeit für den Kontakt ein.', true)" ... />

      das kann ich nicht beeinflussen. Ich habe ein JS geschrieben, dass nach dem
      String "showQuickTipp(" im Quelltext sucht und mir den Parameter der Funktion zurückliefert, um ihn dann per JS weiterzuverarbeiten. Das funktioniert soweit, bis auf:

      In JS wird aus:
      --------------

      'Geben Sie bitte die gewünschte Uhrzeit für den Kontakt ein.'

      'Geben Sie bitte die gew\xFCnschte Uhrzeit für den Kontakt ein.'

      ... und eben auch so dargestellt.

      Wie sorge ich dafür, dass im z.b. "alert()" ein "ü" statt eines "\xFC"
      steht ?

      danke und

      beste gruesse,
      martin

      1. Moin!

        In JS wird aus:

        'Geben Sie bitte die gewünschte Uhrzeit für den Kontakt ein.'

        'Geben Sie bitte die gew\xFCnschte Uhrzeit für den Kontakt ein.'

        Im Javascript-Universum gelten die gleichen Regeln: Javascript nutzt auch Unicode, und die Darstellung von \xFC ist die hexadezimale Escaping-Form für das kleine Ü - 0xFC = 252, deshalb &#252; = \xFC.

        Es gibt nur einen wichtigen Unterschied: Das Escaping wird in Javascript erst zur Laufzeit des Codes aufgelöst, d.h. wenn der konstante String "ausgeführt" wird, d.h. als Datum des Skripts wirkt.

        Wenn du mit Javascript auf den Quelltext zugreifst, greifst du nicht auf das kleine Ü zu, sondern auf die vier getrennten, sichtbaren Zeichen, die erst noch Ü werden sollen. Wenn du dann diese Zeichen ausgibst, bist du selbst für die korrekte Umwandlung verantwortlich. Man kann sich das Leben einfach machen und eine einfache Funktion schreiben (die dann beim Auftreten neuer, unbekannter Escaping-Codes versagt), oder man bastelt sich eine generische Funktion, die das Escaping grundsätzlich rückgängig macht.

        Die spannendere Frage ist aber: Wieso fummelst du mit Javascript in Javascript-Quellcode herum?

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. moin,

          interessant. danke für die bg-info!

          ... , oder man bastelt sich eine generische Funktion, die das Escaping grundsätzlich rückgängig macht.

          das will ich dann mal tun. "escaping rückgängig machen" löst
          bei mir ein schlüsselwort aus: "unescape()". so einfach scheint's
          aber nicht zu funktionieren.

          Die spannendere Frage ist aber: Wieso fummelst du mit Javascript in Javascript-Quellcode herum?

          ich kann das html, dass zum browser geschickt wird, wie gesagt nicht verändern. also muss ich es mit js verbiegen.

          beste gruesse,
          martin

          1. Moin!

            Die spannendere Frage ist aber: Wieso fummelst du mit Javascript in Javascript-Quellcode herum?

            ich kann das html, dass zum browser geschickt wird, wie gesagt nicht verändern. also muss ich es mit js verbiegen.

            Du willst das JS verbiegen, nicht das HTML. Versuchst es aber HTML-Methoden. Klingt irgendwie unpassend.

            - Sven Rautenberg

            --
            "Love your nation - respect the others."
          2. Hi,

            das will ich dann mal tun. "escaping rückgängig machen" löst
            bei mir ein schlüsselwort aus: "unescape()". so einfach scheint\'s
            aber nicht zu funktionieren.

            Das kommt daher, dass "escapen" nicht schon beschreibt, _wie_ etwas geschützt wird. Die JavaScript-Funktion escape() gibt einen eigentlich URL-kodierten String zurück. Was du dort erhältst, ist fast dasselbe, außer dass % durch \\x repräsentiert wird. In E-Mails im Format quoted-printable gibt es dann auch noch die Variante mit =. Die Hexadezimalwerte sind aber zufällig in allen Versionen gleich.
            Im Grunde könntest du also das Gewünschte auch über eine Verkettung von unescape() und einem Ersetzen von \\x durch % per regulärem Ausdruck realisieren.

            Der Yeti

            1. Hi,

              Das scheint so nicht die sauberste Lösung zu sein, aber es
              funktioniert scheinbar.

              vielen Dank,
              martin