Wie füge ich Unicode korrekt in einen HTML-Titel mit JavaScript ein?

8

Ich sehe ein seltsames Verhalten, wenn ich den Titel einer HTML-Seite mit JavaScript setze. Wenn ich HTML-Zeichenreferenzen direkt in den Titel einfüge, wird das Unicode korrekt dargestellt, zum Beispiel:

%Vor%

Aber wenn ich versuche, HTML-Zeichen-Referenzen über JavaScript zu verwenden, scheint etwas die & amp; to (& amp;;) (trennt sie also SO macht es nicht einfach wieder in kaufmännisches und-Zeichen) und damit die Codierung zu brechen, so dass es als die vollständig codierte Zeichenfolge gerendert wird:

%Vor%

(Ich sollte beachten, dass dies ein wenig Spekulation ist; wenn ich nach der Ausführung dieser JavaScript-Funktion das DOM mit Firebug untersuche, dann sehe ich dort das & amp; anstelle von & amp;.)

Wenn ich beim Setzen des Wertes aus JavaScript Unicode-Zeichen verwende, funktioniert alles wieder korrekt:

%Vor%

Die Tatsache, dass die codierten Zeichen irgendwie funktionieren, macht für mich Sinn, da ich glaube, dass JavaScript Unicode-Zeichen darstellt, aber ich bin ratlos, warum das Verhalten bei Verwendung der HTML-Zeichenreferenzen anders wäre.

    
BenG 24.08.2012, 18:02
quelle

2 Antworten

19

JavaScript-String-Konstanten werden vom JavaScript-Parser analysiert. Text in HTML-Tags wird vom HTML-Parser analysiert. Die beiden Sprachen (und damit auch ihre Parser) sind unterschiedlich, und sie haben insbesondere verschiedene Möglichkeiten, Zeichen nach Zeichencode darzustellen.

Was Sie also herausgefunden haben, ist die Realität :-) Verwenden Sie die \u Escape-Notation in JavaScript und verwenden Sie HTML-Entitäten ( &#nnnn; ) in HTML / XML.

edit - jetzt kann die Situation noch verwirrender werden, wenn Sie über das Erstellen / Einfügen von HTML aus JavaScript sprechen. Wenn Sie .innerHTML verwenden, um das DOM von JavaScript zu aktualisieren, geben Sie den HTML-Quellcode im Grunde zur Interpretation an den HTML-Parser weiter. Aus diesem Grund können Sie entweder JavaScript \u escapes oder HTML-Entities verwenden, und die Dinge werden funktionieren (mit Ausnahme von schmerzhaften Problemen bei Zeichencodierungsfehlern usw.).

Beachten Sie, dass JavaScript außerdem die Funktion String.fromCharCode() zum Konstruieren von Zeichenfolgen aus numerischen Zeichencodes bereitstellt.

    
Pointy 24.08.2012, 18:05
quelle
5

Die beste Methode für die Arbeit mit Unicode-Zeichen in JavaScript besteht darin, die Zeichen selbst zu verwenden, indem Sie einen Editor oder ein anderes Tool verwenden, das sie in der UTF-8-Codierung speichern kann. Sie werden viel Verwirrung vermeiden. Natürlich müssen Sie die Zeichencodierung Ihrer .js- oder .html-Datei korrekt deklarieren.

Das Konstrukt 吧 hat in JavaScript keine spezielle Bedeutung; es sind nur acht Ascii-Charaktere. Wenn Ihr JavaScript-Code jedoch in ein HTML-Dokument eingebettet wurde, wird er von HTML-Regeln verarbeitet, bevor er an den JavaScript-Interpreter übergeben wird. Und die Regeln variieren je nach HTML-Version. Noch ein Grund, solche Konstrukte zu vermeiden.

Schreiben Sie einfach

%Vor%

(Natürlich gibt es sehr wenige Situationen, in denen Sie den title -Element-Inhalt - der für Suchmaschinen und viele andere Zwecke von entscheidender Bedeutung ist - in JavaScript ändern, anstatt ihn in HTML zu setzen. Aber das ist nebensächlich. )

    
Jukka K. Korpela 24.08.2012 19:32
quelle

Tags und Links