Comment puis-je insérer correctement l'unicode dans un titre HTML à l'aide de JavaScript?
J'en vois certains comportement bizarre quand je suis définir le titre d'une page HTML à l'aide de JavaScript. Si je insérer du code html de références directement dans le titre de l'Unicode s'affiche correctement, par exemple:
<title>吧出</title>
Mais si je tente d'utiliser les caractères html références via JavaScript, quelque chose qui semble être de la conversion de la & (& amp 😉 (les séparant ainsi DONC, ne fait pas que tourner de nouveau dans esperluette) et donc la rupture de l'encodage, l'amenant à être rendu complet de la chaîne codée:
function execTitleChange() {
document.title = "吧出";
}
(Je tiens à noter que c'est un peu de la spéculation; quand je connaître les DOM à l'aide de Firebug après l'exécution de cette fonction JavaScript, c'est là que je vois le & au lieu de &.)
Si j'utilise \u des caractères Unicode codés lors de la définition de la valeur à partir de JavaScript, tout fonctionne à nouveau correctement:
function execTitleChange() {
document.title = "\u5427\u51fa";
}
Le fait que \u caractères codés de travail type de sens pour moi, car je pense que c'est la façon JavaScript représente des caractères Unicode, mais je suis perplexe quant à pourquoi le comportement serait différent lors de l'utilisation de caractères html références.
document.title = "吧 ...";
, vous devriez avoir document.title = "&21543; ..."
. Vous devriez probablement juste envoyer des têtes d'encodage ou un meta charset
avec votre page.Je n'ai pas mis la totalité de la page HTML, mais j'ai <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> dans l'en-tête.
non, les entités HTML ne fonctionne pas dans ce cas.
OriginalL'auteur BenG | 2012-08-24
Vous devez vous connecter pour publier un commentaire.
JavaScript constantes de chaîne sont analysés par le parser JavaScript. Le texte à l'intérieur des balises HTML est analysé par l'analyseur HTML. Les deux langues (et, par extension, de leurs analyseurs) sont différentes, et en particulier, ils ont différentes manières de représenter des caractères en code de caractère.
Donc, ce que vous avez découvert, c'est la façon dont la réalité est en fait 🙂 Utiliser le
\u
échapper à la notation en JavaScript, et d'utiliser les entités HTML (&#nnnn;
) en HTML/XML.modifier — maintenant, la situation peut être encore plus de confusion lorsque l'on parle de la création/insertion de HTML de JavaScript. Lorsque vous utilisez
.innerHTML
pour mettre à jour le DOM de JavaScript, alors vous êtes fondamentalement remise code source HTML de l'analyseur HTML pour l'interprétation. Pour cette raison, vous pouvez utiliser JavaScript\u
échappe ou des entités HTML, et tout fonctionne (à l'exception de douloureux problèmes d'encodage de caractères décalages etc).Enfin, notez que JavaScript fournit également la
String.fromCharCode()
fonction de construire des chaînes de caractère numérique codes.OriginalL'auteur Pointy
La meilleure façon de travailler avec les caractères Unicode dans les JavaScript est d'utiliser les personnages eux-mêmes, à l'aide d'un éditeur ou d'un autre outil qui peut les stocker dans le codage UTF-8. Vous éviterez beaucoup de confusion. Naturellement, vous avez besoin pour bien déclarer l'encodage des caractères de votre .js ou .fichier html.
La construction
吧
a pas de signification particulière en JavaScript, c'est juste huit caractères Ascii. Mais si votre code JavaScript a été incorporé dans un document HTML, puis elles seront traitées par des règles HTML avant de passer à l'interpréteur JavaScript. Et les règles varient en version HTML. Encore une autre raison d'éviter de telles constructions.Donc il suffit d'écrire
(Bien sûr, il y a très peu de situations où vous devez changer le
title
élément de contenu qui est crucial pour les moteurs de recherche et de nombreuses autres fins, en JavaScript, au lieu de définir dans le langage HTML. Mais c'est à côté de la question.)<meta charset="utf-8">
OriginalL'auteur Jukka K. Korpela