2

私はまだこれに対する適切な答えを見つけていません:

& (アンパサンド) は でエスケープする必要がありonclick="..."ますか? (それとも、すべての HTML 属性で?)

jsFiddle と W3C のバリデーターで、エスケープされたテストとエスケープされていないテストの両方を実行しようとしましたが、どちらも機能しています...

http://jsfiddle.net/6LuES

<div onclick="if (1==1 && 2==2) alert('hello there');">Without escape</div>
<div onclick="if (1==1 &amp;&amp; 2==2) alert(&#39;hello there&#39;);">With escape</div>

http://validator.w3.org/#validate_by_input

<!DOCTYPE html>
<html lang="en"><head><meta charset="utf-8"><title></title></head><body>

<div onclick="if (1==1 && 2==2) alert('hello there');">Click me</div><br>
<div onclick="if (1==1 &amp;&amp; 2==2) alert(&#39;hello there&#39;);">Click me</div>

</body></html>

ありがとう!

4

2 に答える 2

2

&次の文字が一部の HTML エンティティを完成させない場合、属性をエスケープしないままにしておくことは有効です。見る:

var test = ab&lt;

&これはas としてエスケープせずに壊れます&amp;(このフィドルを参照)。したがって、コードを完全に制御でき、HTML エンティティが表示されないことが確実な場合は、エスケープしないでください&。コードをよりクリーンにします。ただし、HTML エンティティがここに表示されてすべてが壊れる可能性がある場合は、エスケープする必要があります&

于 2013-06-02T08:36:55.587 に答える
1

どの HTML バージョンでも、アンパサンド文字「&」を表すことは常に正しいことです。&amp;属性値内での参照の使用。

それをそのまま使用することも正しいかどうかは、コンテキストと HTML のバージョンによって異なります。XHTML のどのフレーバーでも、それは決して正しくありません。他のフレーバーでは、基本的に次の文字の種類に依存しますが、名前文字の場合は、HTML バージョンと属性の性質にも依存します (URL 値の属性は異なる方法で処理されます)。

簡単に言うと、疑わしい場合はエスケープする必要があり、通常は属性内の複雑な JavaScript コードを避ける必要があります。属性値内で関数呼び出しを使用することは問題ありませんが、より複雑なものは簡単に混乱を招きます。実際、多くの人はすべての JavaScript コードを外部の JavaScript ファイルに入れることを好みますが、これには正当な理由があります。副作用として、JavaScript を HTML に埋め込むことによって引き起こされるこのような問題を回避できます。

于 2013-06-02T12:30:56.210 に答える