2012-02-08 26 views
12

javascriptであるhtmlタグの属性値の中でどのようにエスケープするかを理解できない。htmlタグの属性値の中でエスケープする

私が試した属性値としてjavascriptのためのだから私はあなたが常に&をエスケープする必要があることを信じるにつながる」」<>だった:それは動作しません

<a href="javascript:alert(&apos;Hello&apos;);"></a> 

しかし:。

<a href="javascript:alert(&#39;Hello&#39;);"></a> 

<a href="javascript:alert('Hello');"></a> 

は、すべてのブラウザでの作業を行います!

今私は完全に混乱しています。すべての属性値が二重引用符で囲まれていれば、一重引用符をエスケープする必要はありませんか?または、aposとasciiは技術的に異なるキャラクターですか?そのようなjavascriptはascii 39が必要ですが、aposではありませんか?

+0

OK、私はちょうど、'が実際にはHTMLの参照エンティティではないことを知りました.W3Schoolsの言うことにもかかわらず(http://www.w3.org/TR/1998/REC-html40-19980424/sgml/entities.html) ) – Myforwik

+0

私は '''は[HTML 5.0](https://www.w3.org/TR/html50/syntax.html#named-character-references)以来明確に定義されていると思います。 –

答えて

26

HTMLとJavaScriptの2種類の「エスケープ」があります。 HTML文書を解釈する場合、HTMLエスケープが最初に解析されます。

は限りHTMLが考慮されるように、属性値内のルールは、他の場所でも1つのルールと同じです。

  • 満たない文字<をエスケープする必要があります。これには通常&lt;が使用されます。技術的には、HTMLのバージョンによっては、エスケープ処理が必ずしも必要というわけではありませんが、これは常に良い方法です。
  • アンパサンド&はエスケープする必要があります。これには通常&amp;が使用されます。これも必ずしも必須ではありませんが、必要なときに覚えて覚えておくよりも簡単に行う方が簡単です。
  • 属性値の区切り文字として使用される文字は、その内部でエスケープする必要があります。 Ascii引用符"を区切り文字として使用する場合は、&quot;を使用してその出現をエスケープするのが通例ですが、Asciiアポストロフィの場合は、エンティティ参照&apos;が一部のHTMLバージョンでのみ定義されていますので、数字参照&#39;&#x27;)。

好きなだけ>(または他のデータ文字)をエスケープできますが、決して必要ありません。

文字列リテラルには、いくつかのエスケープメカニズム(\)があります。しかし、これらは別の問題であり、あなたの場合は関係ありません。

この例では、現在の仕様に準拠しているブラウザでは、JavaScriptインタプリタに全く同じコードalert('Hello');が表示されます。ブラウザは「エスケープされていません」&apos;または&#39;'です。私は幾分驚いていましたが、最近では&apos;は普遍的にサポートされていませんが、問題はありません。そのデリミタ)、存在する場合は&#39;参照を使用できます。

+0

好奇心から、アンパサンドをエスケープする必要があるときとそうでないときを詳しく教えてください。 –

+1

@RakeshPai、それはHTMLバージョンに依存します。 HTML 4.01の規則では、Ascii文字(a-z、A-Z)が直後に続く場合、または直後に数字記号「#」とAscii文字が続く場合、アンパサンドはエスケープする必要があります。 –

+0

興味深い。他のタイプのHTMLエンティティと競合するので意味があります。ありがとう。 –

-2

タグが二重引用符で囲まれている場合は、一重引用符をエスケープする必要はありません。私がタグ(これはまれにjQueryでまれです)にJavaScriptのコードを記述すると、エスケープする唯一の文字は二重引用符で、ブラウザは残りの部分をうまく処理します。

関連する問題