燈明日記 このページをアンテナに追加 RSSフィード

ごあいさつ

燈明日記へようこそ!!

燈明日記の主なテーマは、以下の通りです。

そして、燈明日記へ来られたのも『私』と『あなた』の何かのご縁です。なので、どうぞごゆっくりご覧下さい!

2008/4/1(火)

[] JavaScript関数へ「'」はエスケープしないと引数として渡せない?

以下のようにonclickからJavaScriptの関数をコールする場合は、「'」はエスケープ(\')しないと引数として渡せない。

以下で、確認しました。ただしIE6のみ確認。

<html>
<body>
<form name="FM">
<input type="text" name="IP"  value="ケース1:反応あり" onclick="subx('cb\&#39;b&quot;\\bc')">
<input type="text" name="IP"  value="ケース2:反応なし" onclick="subx('cb&#39;b&quot;\\bc')">
<input type="text" name="IP"  value="ケース3:反応なし" onclick="subx('cb'b&quot;\\bc')">
</form>
<script>
function subx(a){
  alert(a);
}
</script>
</body>
</html>

ケース2とケース3は同じように無反応になります。

たぶん、&#39;は「'」と解釈されていると思われます。

このような場合は、「\&#39;」にするとonclickが反応します。


あと、ダブルクォートのエスケープについては。

JavaScriptのロジックの文字列で、文字としての「\」を記述するときは、エスケープして「\\」となります。

これをCGIから標準出力する場合、Perlでのダブルクォート文字列では、Perlでのエスケープが加わって「\\\\」となります。

kitskits 2008/04/06 18:58 HTMLとしての解釈とJavaScriptとしての解釈を混同しているように思われます。

onclick=”alert(’&#39;’)”

という属性の表記は、まず「HTMLの」属性として解釈され、文字参照が展開されます。そのためonclick属性の値は正確には alert(’’’) となります。

「JavaScriptが」解釈するのは、この alert(’’’) という値であり、’が余計にあるのでエラーとなりますが、決して「JavaScriptが」 &#39; という文字参照を直接解釈しているわけではありません。

「JavaScriptが文字参照を解釈する」というのが誤りであることは、イベントハンドラ属性内での表記だけでなく、script要素内にかかれた場合や外部ファイルとして書かれた場合について確認していれば理解できたかと思います。例えば、

<script type=”text/javascript”>alert(’&#39;’)</script>

とした場合、HTML 4.01ではscript要素の内容はCDATAであるため、script要素の内容は書かれたままの文字列(=文字参照を展開しない)として解釈され、 &#39; というアラートがでるはずです。

chaichanPaPachaichanPaPa 2008/04/06 21:23 誤りのご指摘、感謝いたします。
勘違いしていました。いつも、ありがとうございます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/chaichanPaPa/20080401/1207049001