2015-10-19 4 views
0

Pour une valeur spéciale, j'ai essayé le HTML <option value="&#0;">unspecified</option>, mais il semble que le caractère NUL n'est pas interprété en HTML. Je reçois . Je voudrais savoir pourquoi, et quels autres caractères inhabituels UTF-8 en dehors de NUL je dois faire attention.Pourquoi HTML ne peut-il pas contenir un caractère NUL? (converti en 0xFFFD/"% EF% BF% BD")

Voici a fiddle to demonstrate de quoi je parle.

<select><option value="&#0;">&#0;</option></select> 

Comme vous pouvez le voir ci-dessus, la liste déroulante est configuré avec des valeurs NUL, mais ils sont convertis en JavaScript lorsque les résultats inspecte.

var select = document.querySelector('select') 
inspect() 
select.options[0].value = '\u0000' 
select.options[0].label = '\u0000' 
inspect() 
select.innerHTML = select.innerHTML 
inspect() 
function inspect() { 
    alert(encodeURIComponent(select.options[0].value) 
     + ',' 
     + encodeURIComponent(select.options[0].label) 
     + ',' 
     + select.innerHTML) 
} 

JavaScript peut spécifiquement mis value et label à \u0000 et il fonctionne, mais pour une raison quelconque ce n'est pas en mesure d'être rendu dans le code HTML.

Pouvez-vous expliquer pourquoi et/ou pointer vers la documentation pertinente? Y a-t-il d'autres caractères UTF-8 qui seront substitués de la même manière?

+2

À quoi pensiez-vous qu'il soit rendu? – rollingBalls

+0

'NULL' est mentionné dans la deuxième note sous [8.2.2.5 Pré-traitement du flux d'entrée] (http://www.w3.org/TR/html5/syntax.html#preprocessing-the-input-stream) dans HTML du W3C/Recommandation XHTML. Il lit comme "cela dépend" pour moi: P – usr2564301

+0

@rollingBalls, je m'attends à '% 00,% 00, ' dans les trois alertes - où NUL est la représentation spécifique au navigateur d'un personnage NUL. –

Répondre

0

NUL n'est pas valide. HTML est un document basé sur du texte. Seules les chaînes de caractères peuvent être entrées.

https://developers.whatwg.org/elements.html#attributes

Sauf indication contraire, les attributs sur les éléments HTML peuvent avoir une valeur de chaîne, y compris la chaîne vide. Sauf indication explicite , il n'y a aucune restriction quant au texte pouvant être spécifié dans ces attributs .

+0

À moins que NUL ait été explicitement indiqué, je suppose que la citation signifie que NUL est (ou devrait être) autorisé - j'ai toujours considéré que '" \ u0000 "' se qualifie dans la famille de "toute valeur de chaîne". –

2

Il existe un character reference override table in the HTML5 spec pour le mappage des références de caractères. La première est pour &#0;

Ceci est suivi par une certaine prose indiquant que les nombres dans la plage 0xD800 à 0xDFFF ou supérieur à 0x10FFFF sont également mappés au caractère de remplacement Unicode.