2017-01-03 6 views
1

私はHtmlAttributeEncodeのドキュメントを読んでいました。これは、二重引用符で囲まれたHTMLを属性として表示するときに使用することを意図しています。属性をレンダリングするときに<と&をエスケープする必要があるのはなぜですか?

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

私の知る限り、私はエスケープする必要があります唯一の文字は二重引用符になります。ブラウザは、その文字列内の他のすべてを属性内に含めることができなければなりません。

なぜドキュメントはこれを言っていますか?

HtmlAttributeEncode方法は、同等の文字エンティティにのみ引用符( ")、アンパサンド(&)、および左山カッコ(<)に変換。それはかなり速くHtmlEncodeメソッドを超えています。

そして、実際には、this poor guyで見ることができるように、それらをエスケープしません。

この状況で<と&文字をエスケープするために何らかの理由があるのでしょうか?それはHTML5の仕様で要求されますか?区切りが始まり、この文字列で終わるところ私の人間の目では

私は簡単に見ることができます:

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

限り、二重引用符のシーケンスが適切に閉じられている(二重引用符がエスケープされている)として、私はドン」なぜ他の文字をHTMLでエンコードする必要があるのか​​理解できません。スペックから

+0

理由:これらは空白のためのHTMLエンコードされた文字列、< and >ある  < >、 ブラウザがタグとして< or >が..ので、あなたがそれらを使用するべきではないと思うかもしれないか、 –

+0

が了解それらをエスケープする必要があります。ただし、属性にはHTMLではなく平文文字列のみが含まれます。マークアップ ' '文字列の始まりと終わりのあいまいさがなく、何かをエスケープする理由はありません –

+2

残念ながら、残念ながらそれはブラウザコードが動作する方法ではありません。 '<'に出会うと、別のタグの開始と考えるようになるかもしれません –

答えて

2

:特に指定のある場合を除き

3.2.3.1 Attributes

は、空の文字列を含む任意の文字列値を有していてもよいHTML要素の属性。明示的に述べられている場合を除いて、そのような属性でどのテキストを指定できるかに制限はありません。

specs of html4によると、value属性の内容は、cdataのタイプにする必要があります。

&lt;は」を表す:文字エンティティは、彼らが頻繁に特殊文字をエスケープするために使用されているので

四文字実体参照は、特別な言及に値する参照

5.3.2:HTML Document Representationから

<符号。
"&gt;"は>記号を表します。
&amp;」は&の符号を表します。
&quot;」は「マーク」を表します。

テキストに "<"文字を入れることを希望する著者は、タグの開始(開始タグのオープンデリミタ)の混乱を避けるために、 "&lt;"(ASCII小数点60)を使用する必要があります。同様に、著者は、引用符で囲まれた属性値に現れるときに、これをタグの終わり(タグの終了区切り文字)として間違って認識する古いユーザエージェントの問題を避けるために、 ">"ではなく "&gt;"(ASCII小数点62)を使用するべきです。

文字参照の開始(エンティティ参照の公開デリミタ)の混乱を避けるため、作成者は "&"の代わりに "&"(ASCII小数点38)を使用する必要があります。 文字参照はCDATA属性値内で許可されるので、著者は属性値に "&"も使用する必要があります。

+0

さらに、XMLの定義は非常に似ています –

+0

@MarkFitzpatrick、thats correct。xhtml(およびhtml5)はXMLベースです:) – Dekel

関連する問題