JAVASCRIPTと実体参照
'→(') などの実体参照をJAVASCRIPTで利用する時気をつけることWEBサービスからのデータをPHPで加工してJAVASCRIPTで利用しようとした時エラーがでてはまったことでわかったこと。
PHPで htmlspecialchars() 関数を使うと特殊文字がHTMLエンティティに変換されます。
変換は下の5つ。
& (アンパサンド) は &、" (ダブルクォート) は "、' (シングルクオート) は '、< (小なり) は '<' '>' (大なり) は '>'。
例えば「 It's a pen 」を変換した場合「 It"s a pen 」となりますがこれをJAVASCRIPTの引数にしたい場合、
echo '<input type="button" value="ボタン" onclick="a(\'It's a pen\')">';や、
echo '<input type="button" value="ボタン" onclick=\'a("It's a pen")\'>';にするとエラーになります。
これはJAVASCRIPTで利用される前に
<input type="button" value="ボタン" onclick="a('It's a pen')">や、
<input type="button" value="ボタン" onclick='a("It's a pen")'>と
実体参照が展開されるためのようです。
エラーが無いように書くには
<input type="button" value="ボタン" onclick="a('It\'s a pen')">
となります。
で、まだ話は続きます。
<script></script>内で使うときの場合は先ほどとは違います。
結論を言いますと<script></script>内では実体参照が展開されないようで
' は ' のままとなります。
<script>
alert(''')
</script>
これを実行するとエラーとならず、「 ' 」と表示されます。
実際にできるようにのせておきます。
<script>
function a(){
if("'"=="'"){alert("「 ' 」は同じ")}else{alert("「 ' 」は違う")}
}
</script>
<input type="button" value="scriptタグ外" onclick=javascript:if("'"=="'"){alert("「 ' 」は同じ")}else{alert("「 ' 」は違う")}> <input type="button" value="scriptタグ内" onclick="a()">
実験用→
function a(){
if("'"=="'"){alert("「 ' 」は同じ")}else{alert("「 ' 」は違う")}
}
</script>
<input type="button" value="scriptタグ外" onclick=javascript:if("'"=="'"){alert("「 ' 」は同じ")}else{alert("「 ' 」は違う")}> <input type="button" value="scriptタグ内" onclick="a()">
実験用→
※(注)\ バックスラッシュはキーボードの ¥ 円マークにあたります。入力するときは円マークを入力してください
スポンサードリンク