Kalle_B: HTML-Umlaute ä werden nicht interpretiert

Hallöle,

auf einem Datenpflegeformular kann ich per Radio-Button anklicken, ob ich den gezeigten Satz ändern, kopieren oder löschen möchte.

Per Javascript ändere ich dann auch den Submit- Button in Farbe und Text. Aber die Umlaute bei ändern und löschen werden nicht im HTML- Sinne umgesetzt. Hier mal ein Muster:

<input id=knopf type=submit value='neu'>

<script type="text/javascript">
//document.getElementById( 'knopf' ).value = '&auml;ndern';
  document.getElementById( 'knopf' ).innerHTML = '&auml;ndern';
</script>

Die Anzeige im Knopf ist in beiden Fällen &auml;ndern, also mit & voran.

Ein Umlaut- ä zu nehmen, ist sinnlos, dann bekomme ich wieder Schwierigkeiten mit dem Zeichencode UTF-8 (zumindest, wenn der Browser nicht UTF-8 ausgibt).

Es muss doch möglich sein, HTML- Zeichen in ein HTML- Dokument zu schreiben. Wie geht es?

Lieben Gruß, Kalle

  1. Hallo,

    Per Javascript ändere ich dann auch den Submit- Button in Farbe und Text. Aber die Umlaute bei ändern und löschen werden nicht im HTML- Sinne umgesetzt.

    natürlich nicht.

    <script type="text/javascript">
    //document.getElementById( 'knopf' ).value = '&auml;ndern';
      document.getElementById( 'knopf' ).innerHTML = '&auml;ndern';
    </script>
    Die Anzeige im Knopf ist in beiden Fällen &auml;ndern, also mit & voran.

    Natürlich. Der Kontext, in dem dieser String steht, ist Javascript, nicht HTML. In Javascript-Strings werden keine HTML-Entities decodiert - warum auch?

    Ein Umlaut- ä zu nehmen, ist sinnlos

    Eigentlich ist das die sinnvollste aller Lösungen.

    dann bekomme ich wieder Schwierigkeiten mit dem Zeichencode UTF-8 (zumindest, wenn der Browser nicht UTF-8 ausgibt).

    Hä? Der Browser gibt das aus, was du als Autor ihm vermittelst. Entweder über den HTTP-Header, oder -wenn die Angabe dort fehlt- über eine entsprechende meta-Angabe. Dass der Benutzer das trotzdem mutwillig auf eine falsche Codierung umstellen kann, ist klar. Das ist aber nicht dein Problem.

    So long,
     Martin

    --
    Soso, der Klügere gibt nach.
    Aber warum sollen sich immer nur die Dummen durchsetzen?  .oO(?)
    1. Natürlich. Der Kontext, in dem dieser String steht, ist Javascript, nicht HTML. In Javascript-Strings werden keine HTML-Entities decodiert - warum auch?

      Whow - bin seit Jahren dabei, aber darauf bin ich nicht gekommen, dass es innerhalb des HTML HTML- freie Inseln gibt.

      <html>
      <body>
      <script type="text/javascript">
      //Ja, jetzt - eine Insel ... &auml;
      </script>
      </body>
      </html>

      Aber, wenn man erstmal drüber spricht ...
      Ich nehme einfach die Umlaute vom HTML- Festland. Bisschen getrickst aber es funzt:

      <input type=radio name=test onChange="document.getElementById( 'knopf' ).value = 'kopieren'"> kopieren &nbsp;
      <input type=radio name=test onChange="document.getElementById( 'knopf' ).value = '&auml;ndern'"> &auml;ndern &nbsp;
      <input type=radio name=test onChange="document.getElementById( 'knopf' ).value = 'l&ouml;schen'"> l&ouml;schen<br>
      <input id=knopf type=submit value='neu'>

      Obwohl wir bei onChange= auch wieder im Javascript wären. Aber ich muss ja nicht alles verstehen.

      Kalle

      1. <input type=radio name=test onChange="document.getElementById( 'knopf' ).value = 'l&ouml;schen'"> l&ouml;schen<br>
        <input id=knopf type=submit value='neu'>

        Das eine Radiobutton ein onchange auslöst, wenn man drauf klickt ist ungewöhnlich, du änderst ja nicht den Wert des Buttons.

        Warum du hier auf HTML Entities bestehst ist mir aber ein Rätsel, ein ä ist ein ä und wenn du die gleiche Kodierung im Editor verwendest, wie die in dem  dein Dokument ausgeliefert wird, wird es auch als ä angezeigt.

        Obwohl wir bei onChange= auch wieder im Javascript wären. Aber ich muss ja nicht alles verstehen.

        onevent ist ein Attribut eines HTML Elementes. Steht also im Kontext von HTML

        Struppi.

    2. @@Der Martin:

      nuqneH

      In Javascript-Strings werden keine HTML-Entities decodiert - warum auch?

      Stellen wir die Frage mal anders: warum nicht?

      Antwort: Weil der Inhalt des 'script'-Elements in HTML vom Typ CDATA ist, also nicht geparst wird, also '&auml;' nicht zu 'ä' aufgelöst wird.

      Selbiges bei als 'text/html' ausgeliefertem XHTML; dieses wird ja genauso vom Tagsoup-Parser verarbeitet.

      Ganz anders sieht es aus bei als 'application/xhtml+xml' ausgeliefertem XHTML: Der Inhalt des 'script'-Elements ist dann vom Typ PCDATA, wird also geparst, '&auml;' wird zu 'ä' aufgelöst.

      Mit IE wirst du dies freilich nicht ausprobieren können. ;-)

      Qapla'

      --
      Bildung lässt sich nicht downloaden. (Günther Jauch)
      1. Hallo Gunnar,

        Antwort: Weil der Inhalt des 'script'-Elements in HTML [bei text/html] vom Typ CDATA ist
        Ganz anders sieht es aus bei als 'application/xhtml+xml' ausgeliefertem XHTML: Der Inhalt des 'script'-Elements ist dann vom Typ PCDATA, wird also geparst, '&auml;' wird zu 'ä' aufgelöst.

        danke, dieser Unterschied war mir tatsächlich auch noch nicht bekannt.

        Mit IE wirst du dies freilich nicht ausprobieren können. ;-)

        Warum auch? ;-)

        Ciao,
         Martin

        --
        Dieser Satz wurde in mühsamer Kleinstarbeit aus einzelnen Wörtern zusammengesetzt.
          (Hopsel)
  2. Hi,

    <input id=knopf type=submit value='neu'>

    <script type="text/javascript">
    //document.getElementById( 'knopf' ).value = '&auml;ndern';
      document.getElementById( 'knopf' ).innerHTML = '&auml;ndern';
    </script>

    Die Anzeige im Knopf ist in beiden Fällen &auml;ndern, also mit & voran.

    value enthält Text; und innerHTML bei einem Element zu verwenden, das gar kein HTML enthält, ist auch eher unsinnig.

    Ein Umlaut- ä zu nehmen, ist sinnlos, dann bekomme ich wieder Schwierigkeiten mit dem Zeichencode UTF-8 (zumindest, wenn der Browser nicht UTF-8 ausgibt).

    Was meinst du mit letzterem?
    Der Browser stellt Zeichen wie gewünscht dar, wenn du ihm sagst, in welcher Kodierung sie vorliegen.

    Es muss doch möglich sein, HTML- Zeichen in ein HTML- Dokument zu schreiben. Wie geht es?

    Ganz normal, als ä oder &auml;
    Dein Kontext hier ist aber JavaScript.
    \u00e4 könntest du an der Stelle nutzen, wenn du (wie ich stark vermute) wirklich keine Lust hast, dein Zeichenkodierungschaos vernünftig aufzuräumen.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
  3. Hi,

    Es muss doch möglich sein, HTML- Zeichen in ein HTML- Dokument zu schreiben.

    aber sicher doch. Ganz anders ist aber die Sachlage, wenn Du HTML-Zeichen in JavaScript-Code unterbringst. Hier gelten in erster Linie JavaScript-Regeln. Vor den (nach wie vor existierenden) Einflüssen des HTML-Umfeldes kann man sich per <![CDATA[]]> weitgehend abschotten, aber die Tatsache, dass Du in JavaScript auf JavaScript stößt, kann und wird sich nicht ändern.

    Kodiere also die Umlaute so, wie es JavaScript verlangt, nicht so, wie es eine fremde Technik wie HTML oder eine URL verlangt.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Ganz anders ist aber die Sachlage, wenn Du HTML-Zeichen in JavaScript-Code unterbringst. Hier gelten in erster Linie JavaScript-Regeln. Vor den (nach wie vor existierenden) Einflüssen des HTML-Umfeldes

      Es gibt keine derartigen Einflüsse, wie Gunnar auch geschrieben hat, weil der script-Elementinhalt von diesen weitesgehend ausgenommen ist.

      kann man sich per <![CDATA[]]> weitgehend abschotten

      Bei HTML hat das weder eine Notwendigkeit noch eine Wirkung - bei XHTML als XML hingegen ist es sehr ratsam.

      Kodiere also die Umlaute so, wie es JavaScript verlangt, nicht so, wie es eine fremde Technik wie HTML oder eine URL verlangt.

      Es ist in JavaScript genauso (un)nötig, ä durch »\u00E4« o.ä. zu maskieren, wie es in HTML (un)nötig ist, ä durch &auml; zu maskieren.

      Mathias

  4. @@Kalle_B:

    nuqneH

    Ein Umlaut- ä zu nehmen, ist sinnlos,

    Nein, genau das ist das Sinnvollste. [QA-ESCAPES]

    dann bekomme ich wieder Schwierigkeiten mit dem Zeichencode UTF-8

    ?? Man bekommmt immer wieder Schwierigkeiten, wenn man _nicht_ UTF-8 verwendet.

    (zumindest, wenn der Browser nicht UTF-8 ausgibt).

    ?? Der Server sollte dem Client schon die verwendete Codierung angeben. [QA-HTACCESS-CHARSET, QA-CHANGING-ENCODING]

    Qapla'

    --
    Bildung lässt sich nicht downloaden. (Günther Jauch)