ISO 10646 und nodeValue()
Michael
- javascript
0 Ed X0 Daniel Thoma0 Michael
hi all!
ich moechte gerne mit nodeValue() den inhalt eines nodes (<a>) dynamisch setzen. das klappt eigentlich wunderbar.
nur habe ich dabei das problem, dass html-gerechte umlaute wie "ü" nicht als "ü" dargestellt werden, sondern eben als "ü"!
[snip]
var text = new Array();
text[0]="non-escaped ü ..";
text[1]="html-escaped ü ..")
document.getElementById("bla").firstChild.nodeValue = text[1]
[snip]
<a id="bla">bla</a>
[snip]
getestet mit mozilla 0.9.8 und IE 5.50 => dasselbe verhalten.
in den html-headers steht content type ISO-8859-1
wie kann ich ihm beibringen diese zeichen "richtig" darzustellen?
danke im voraus fuer ideen.
gruss
- Michael -
Hi
nur habe ich dabei das problem, dass html-gerechte umlaute wie "ü" nicht als "ü" dargestellt werden, sondern eben als "ü"!
das ist auch richtig so, da "ü" als Zeichenkette repräsentiert
wird. Du darfst die Funktion nicht mit document.write verwechseln!!
und solange du im western-latin 1 unterwegs bist, ist das mit den
Umlauten kein Problem. Ärger gibt es nur, wenn du zeichen aus
verschieden Zeichensätzen verwenden willst. Abhilfe schafft Folgendes:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Untitled</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script>
function wechsel() {
var text = new Array();
text[0]="non-escaped ü ..";
text[1]="html-escaped ü ..";
document.getElementById("bla").firstChild.nodeValue = text[0];
}
</script>
</head>
<body>
<a id="bla" href="javascript:void()" onclick="wechsel()">bla</a>
</body>
</html>
teste ie6 und mozill098
bye eddie
hi edi
nur habe ich dabei das problem, dass html-gerechte umlaute wie "ü" nicht als "ü" dargestellt werden, sondern eben als "ü"!
das ist auch richtig so, da "ü" als Zeichenkette repräsentiert
wird. Du darfst die Funktion nicht mit document.write verwechseln!!
und solange du im western-latin 1 unterwegs bist, ist das mit den
Umlauten kein Problem. Ärger gibt es nur, wenn du zeichen aus
verschieden Zeichensätzen verwenden willst. Abhilfe schafft Folgendes:
[snip]
danke fuer den code! leider funktioniert es nur mit text[0], ich suche aber eine loesung wenn ich zeichenketten in "ü"-form habe, wie in text[1]... welches document-encoding muss ich denn da benutzen?
gruss
- Michael -
Hi Michael,
du hast dir -mit verlaub- ein sche..ßproblem rausgesucht.
Es ist in JavaScript lösbar, aber mit welchem aufwand.
Ich vermute du must text, der in einer datenbank hängt und bereits
entities enthält in html umwandeln? Warum du das nicht dirket in die
Htmlseite reinschreiben kannst ist mir nicht klar aber du wirst deine
erklärung haben ;-)
Was ist zu tun?
1. den verantwortlichen dafür finden, dass die dinger als unflexible
und platzfressende entities in der datenbank sind. Diesen jemand
nachdrücklich körperlich verwarnen ;-)
2. Entscheidung treffen ob serverseitig oder clientseitig arbeiten
a) serverseitig ist meist schneller bei großen texten
b) ist flexibler im umgang mit unicode
Da du mit DOM-kompatiblen scripts arbeitest, sollten alle Browser für
die du das script machst auch die erweiterte replace function
beherrschen (außer vermutlich Opera grrrrrrr....)
folgendes könnte helfen
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Untitled</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8559-1">
<script>
function wechsel() {
txt = "zu ersetzender Text mit Ärgerstifter";
matcher = /&#([0-9]{2,5});/g
txt = txt.replace(matcher ,
function killThem(whole,numb) {
return String.fromCharCode(parseInt(numb));
}
);
document.getElementById("bla").firstChild.nodeValue = txt;
}
</script>
</head>
<body>
<a id="bla" href="javascript:void(0)" onclick="wechsel()">bla</a>
</body>
</html>
danke fuer den code! leider funktioniert es nur mit text[0], ich suche aber eine loesung wenn ich zeichenketten in "ü"-form habe, wie in text[1]... welches document-encoding muss ich denn da benutzen?
obenstehender Code funktioniert nur für dezimal unicode encodierte
Entities. Sollte das Mit hexadezimal codierten gemischt sein, würde
ich den Verantwortlichen nicht nur verwarnen :-)) + <eg>
bye eddie
Hallo Allerseits
Aus der HTML-Spezifikation:
<!ENTITY % Script "CDATA" -- script expression -->
<!ELEMENT SCRIPT - - %Script; -- script statements -->
* CDATA is a sequence of characters from the document character set and may include character entities. User agents should interpret attribute values as follows:
* Replace character entities with characters,
* Ignore line feeds,
* Replace each carriage return or tab with a single space.
Somit müsste es eigentlich ersetzt werden.
Da in JavaScript allerdings sehr oft & verwendet wird, werden Entities nichtmal von Mozilla ersetzt.
Außer man verwendet XHTML mit contenttype text/xml.
Entities zu ersetzen, würde ziemlich viele Scripts nicht mehr lauffähig machen.
Grüße
Daniel
hi daniel
* CDATA is a sequence of characters from the document character set and may include character entities. User agents should interpret attribute values as follows:
* Replace character entities with characters,
* Ignore line feeds,
* Replace each carriage return or tab with a single space.
Somit müsste es eigentlich ersetzt werden.
Da in JavaScript allerdings sehr oft & verwendet wird, werden Entities nichtmal von Mozilla ersetzt.
danke fuer die aufklaerung!
sieht so aus als muesste ich entitaeten wieder zurueckwandeln bevor ich sie in <script>s gebrauche. hmm da werd ich wohl etwas in perl basteln muessen...
Außer man verwendet XHTML mit contenttype text/xml.
Entities zu ersetzen, würde ziemlich viele Scripts nicht mehr lauffähig machen.
ja und wegen dem kleinen wort "should" kann ich nicht mal einen bug aufmachen im bugzilla.mozilla.org ;)
gruss
- Michael -