2010-11-19 9 views
14
<script type="text/javascript"> 
    function test() { 
     alert('&lt;span&gt;blah&lt;span&gt;'); 
    } 
</script> 
<a href="#" onclick="test();">First</a><br /> 
<a href="#" onclick="alert('&lt;span&gt;blah&lt;span&gt;');">Second</a><br /> 
Third: &lt;span&gt;blah&lt;span&gt; 

デモ:http://jsfiddle.net/LPYTZ/スクリプトタグ内のHTMLエンティティは変換されませんか?

なぜ最初の結果が違うのですか? <script>タグは何とかエンティティの変換から除外されていますか?

答えて

21

defined in the DTD as containing CDATAです。つまり、エンティティとタグは、パーサーが終了タグのように見えるまで無視されます。

XHTML is differentこれらの要素内のエンティティとタグは通常どおり機能しますが、XHTMLとして解析された場合のみ機能します。 <![CDATA[ … ]]>でCDATAのコンテンツを明示的にマークすることができます。

ブラウザはHTMLルールを使用してXHTMLをtext/htmlとして扱い、両方のルールセットで正しいコードを書こうとすると、厄介なものになります。

問題を回避する最も簡単な方法は、スクリプトを外部ファイルに保存し、それらを含めるためにsrc属性を使用することです。

+0

+1 XHTMLにも言及しています。 – Gumbo

+0

私はすでに* XHTMLを(jsfiddleでも)+1していますが、「ブラウザはXHTMLをHTMLルールを使ってtext/htmlとして扱います。 – AndreKR

+0

@AndreKR:コンテンツではなく、重要なMIMEメディアタイプです。 – Gumbo

10

はい、content model of STYLE and SCRIPTは特別です:

STYLESCRIPT要素は、データモデルにCDATAを使用していますが、これらの要素のために、CDATAは、ユーザエージェントによって異なる方法で処理しなければなりません。マークアップとエンティティは生のテキストとして扱われ、そのままアプリケーションに渡されなければなりません。文字列 "</"(終了タグの区切り文字)の最初の出現は、要素の内容の終わりを終了するものとして扱われます。有効な文書では、これは要素の終了タグになります。 HTML、スクリプトとスタイル要素で

関連する問題