小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

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でのエスケープが加わって「\\\\」となります。