Entities in JS-eingefügtem Text
Jürgen Herz
- javascript
Hallo zusammen,
wenn Umlaute in einem HTML-Dokument vorkommen, schreibe ich die immer als HTML-Entites.
Was aber soll man tun wenn ein über JS einzufügender Text Umlaute enthält? Ich habe überrascht festgestellt, daß mit sowas hier
var text = document.createTextNode("Mächtig wenüg Text hier.");
var el = document.getElementById("inserttext");
el.appendChild(text);
der Text zwar eingefügt wird, angezeigt werden aber tatsächlich ä und ü statt der Umlaute.
Mach' ich da einen Fehler? Ist es komplizierter?
Grüße,
Jürgen
Jürgen,
wenn Umlaute in einem HTML-Dokument vorkommen, schreibe ich die immer als HTML-Entites.
Und das tust du warum?
Gunnar
Gunnar,
wenn Umlaute in einem HTML-Dokument vorkommen, schreibe ich die immer als HTML-Entites.
Und das tust du warum?
Weil es mir dann wurscht sein kann, mit welcher Kodierung der Server die jeweilige Seite ausliefert.
Ich kann dann Unicode und 8859-1 Zeichen gemischt verwenden, ohne im Editor aufpassen zumüssen, daß mir alles zerhäckselt wird.
Ist irgendwas falsch an ü? Ich dachte bisher, das wäre sogar ein Muß.
Jürgen
Jürgen,
Ich kann dann Unicode und 8859-1 Zeichen gemischt verwenden,
Da gibt’s nichts zu mischen. Die mit ISO 8859-1 codierbaren Zeichen sind vollständig in Unicode enthalten: U+0000 bis U+00FF.
ohne im Editor aufpassen zumüssen, daß mir alles zerhäckselt wird.
Du musst lediglich aufpassen, dass du in der Codierung abspeicherst, die dein Server auch ausliefert.
Ist irgendwas falsch an ü?
Nein. Aber es ist nicht nötig und macht den Quelltext schlechter lesbar.
Ich dachte bisher, das wäre sogar ein Muß.
Nein, du kannst Umlaute problemlos im Quelltext verwenden – entsprechende Angabe der Zeichencodierung vorausgesetzt.
Gunnar
PS. Warum die Entität bei deiner Konstruktion nicht aufgelöst wird, weiß ich auch noch nicht. document.write("ä")
ergibt "ä".
Hallo,
PS. Warum die Entität bei deiner Konstruktion nicht aufgelöst wird, weiß ich auch noch nicht.
Entity-Referenzen (nodeType=5) bilden eigene Knoten im Dokumentenbaum. Wenn in einen Textknoten (nodeType=3) die Zeichenkette "ä" geschrieben wird, dann steht eben diese ungeparst im nodeValue.
MfG, Thomas
Hi,
Was aber soll man tun wenn ein über JS einzufügender Text Umlaute enthält? Ich habe überrascht festgestellt, daß mit sowas hier
var text = document.createTextNode("Mächtig wenüg Text hier.");
var el = document.getElementById("inserttext");
el.appendChild(text);
der Text zwar eingefügt wird, angezeigt werden aber tatsächlich ä und ü statt der Umlaute.
Warum erwartest Du, daß in Javascript Strings auf irgendwelche magische Weise umgewandelt werden?
Javascript kennt keine Entities. Entities sind in HTML bekannt. Javascript hat aber nicht unbedingt was mit HTML zu tun.
Der Inhalt von HTML-script-Elementen oder HTML-Event-Handler-Attributen wird aber unbehandelt - d.h. ohne Umwandlung von Entities - an den Javascript-Interpreter weitergereicht.
Du kannst also entweder die Zeichen direkt angeben oder aber fromCharCode nutzen.
cu,
Andreas
Hallo,
Javascript kennt keine Entities. Entities sind in HTML bekannt. Javascript hat aber nicht unbedingt was mit HTML zu tun.
Sofern der Browser und seine DOM-Implementierung mitspielt, waere createEntityReference() eine Moeglichkeit. AFAIK wird diese Methode nur von Mozilla-Derivaten unterstuetzt, aber zu einem Ergebnis bin ich im (X)HTML-Kontext noch nicht gekommen.
Im SVG-Kontext funktioniert es z. B. so (mit ASV 3.0x):
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
<!ENTITY auml "ä">
<!ENTITY ouml "ö">
<!ENTITY uuml "ü">
<!ENTITY Auml "Ä">
<!ENTITY Ouml "Ö">
<!ENTITY Uuml "Ü">
<!ENTITY szlig "ß">
]>
<svg xmlns="http://www.w3.org/2000/svg" onload="Text_mit_Entitys(evt)">
<defs>
<script type="text/javascript">
<![CDATA[
function Text_mit_Entitys(evt)
{
var ae=document.createEntityReference("auml");
var oe=document.createEntityReference("ouml");
var ue=document.createEntityReference("uuml");
var Ae=document.createEntityReference("Auml");
var Oe=document.createEntityReference("Ouml");
var Ue=document.createEntityReference("Uuml");
var sz=document.createEntityReference("szlig");
var text=document.createElement("text");
text.setAttribute("x","10");
text.setAttribute("y","30");
text.setAttribute("font-size","24");
text.setAttribute("fill","#F00");
textnode=document.createTextNode("Zeichen: ");
text.appendChild(textnode);
text.appendChild(ae);
text.appendChild(oe);
text.appendChild(ue);
text.appendChild(Ae);
text.appendChild(Oe);
text.appendChild(Ue);
text.appendChild(sz);
document.documentElement.appendChild(text);
}
]]>
</script>
</defs>
</svg>
Ansonsten bleibt bei Bedarf wie bereits genannt String.fromCharCode().
MfG, Thomas