2017-01-03 1 views
1

Ich habe die Dokumentation für HtmlAttributeEncode gelesen, die, wie ich es verstehe, für die Verwendung beim Rendern von HTML, das in Anführungszeichen als Attribut, z.Warum muss ich <und & beim Rendern eines Attributs entkommen?

<INPUT Value="This value must be escaped so that it doesn't contain any quotes"> 

Soweit ich sagen kann, das einzige Zeichen, das ich entkommen müsste, wäre das doppelte Zitat. Der Browser sollte in der Lage sein, alles andere herauszufinden, das der String zum Attribut gehört.

Warum sagt die Dokumentation das?

Die HtmlAttributeEncode Methode konvertiert nur in Anführungszeichen ("), Et-Zeichen (&) und linke spitze Klammern (<) zu äquivalenten Zeichenentität. Es wesentlich schneller als die Htmlencode-Methode.

Und in der Tat ist es diejenigen zu entkommen, wie this poor guy zu sehen ist.

gibt es keinen Grund, die < und & Zeichen in diesem Umstand zu entkommen? wird es von der HTML5-Spezifikation erforderlich?

Mit meinem menschlichen Auge kann ich leicht sehen, wo die Abgrenzung beginnt und endet in dieser Zeichenfolge:

<INPUT value="You & I can both easily see that 5 < 6!"> 

Solange die doppelten Anführungszeichen Sequenz richtig geschlossen ist (und doppelte Anführungszeichen entgangen sind) I don‘ Ich verstehe, warum die anderen Charaktere HTML-codiert sein müssen.

+0

Grund:   < > diese HTML-kodierten Strings für Leerzeichen, < and > könnte Browser < or > als Tags denken .. daher sollten Sie sie nicht verwenden, oder Sie haben zu entkommen sie –

+0

verstanden. Ein Attribut enthält jedoch nur eine Klartextzeichenfolge, nicht HTML. Das Markup ' 'gibt es keine Mehrdeutigkeit, wo die Zeichenfolge beginnt und endet, und keinen Grund, nichts zu entgehen. –

+2

leider funktioniert Browsercode nicht .. wenn es ein offenes Tag findet '<' es sucht nach dem nächsten '>'. um dieses Tag zu schließen.Wenn es also auf ein anderes '<' stößt, könnte es es als Anfang eines anderen Tags betrachten. –

Antwort

2

Von den Spezifikationen:

3.2.3.1 Attributes

Sofern nicht anderweitig angegeben, Attribute auf HTML-Elemente können eine beliebige Zeichenfolge-Wert haben, einschließlich der leeren String zurück. Außer wenn ausdrücklich angegeben, gibt es keine Beschränkung dafür, welcher Text in solchen Attributen spezifiziert werden kann.

Nach specs of html4, der Inhalt des value Attribut sollte in der Art der cdata sein.

Vom HTML Document Representation:

5.3.2 Zeichenentitätsverweise

Vier Zeichenentitätsverweise verdienen besondere Erwähnung, da sie häufig Sonderzeichen zu entkommen verwendet:

&lt;“ steht für die < Zeichen.
"&gt;" steht für das> Zeichen.
"&amp;" steht für das & Zeichen.
"&quot;" steht für die "Marke.

Autoren, die das Zeichen "<" in den Text setzen möchten, sollten "&lt;" (ASCII dezimal 60) verwenden, um mögliche Verwechslungen mit dem Anfang eines Tags zu vermeiden (Start Tag Open Delimiter). In ähnlicher Weise sollten Autoren "&gt;" (ASCII dezimal 62) in Text anstelle von ">" verwenden, um Probleme mit älteren Benutzeragenten zu vermeiden, die dies fälschlicherweise als das Ende eines Tags (Begrenzertrennzeichen) erachten, wenn es in in Anführungszeichen gesetzten Attributwerten erscheint.

Autoren sollten "&" (ASCII-Dezimal 38) anstelle von "&" verwenden, um Verwechslungen mit dem Beginn einer Zeichenreferenz zu vermeiden (offenes Trennzeichen für Entitätsreferenz). Autoren sollten in Attributwerten auch "&" verwenden, da Zeichenreferenzen in CDATA-Attributwerten zulässig sind.

+0

Außerdem ist die XML-Definition sehr ähnlich –

+0

@MarkFitzpatrick, das ist korrekt xhtml (und auch html5) sind xml-basiert :) – Dekel

Verwandte Themen