利用できる値を編集できるフォームエディターを想像してみてください。データに_"
_文字(二重引用符)が含まれている場合は、HTMLコードを「破棄」します。つまり、コードを確認してみましょう。HTMLを生成します。
onclick="var a = Prompt('New value: ', '<?php echo addslashes($rec[$i]); ?>'); if (a != null)....
そしてそれは
onclick="var a = Prompt('New value: ', 'aaaa\"aaa'); if (a != null) { v....
これによりJSが機能しなくなり、コードが破壊されます。単一のqoute _'
_では問題なく動作します。 _mysql real escape
_も同じです。 javascriptを台無しにしないように文字列をエスケープする方法は?
json_encodeは問題ないように見えましたが、私は何か悪いことをしているに違いありませんが、それでも悪いことです。値は単なる数値です。
http://img402.imageshack.us/img402/5577/aaaahf.gif
そして私は使用しました:
_('Ird be az új nevet:', <?php echo json_encode($rec['NAME']); ?>); if (a) {
_
onclick
属性の値は、他のHTML属性と同様に、 htmlspecialchars()
を使用してエスケープする必要があります。コード内の実際のJavaScript文字列は json_encode()
を使用してエンコードする必要があります。例えば:
<?php
$message = 'Some \' problematic \\ chars " ...';
$jscode = 'alert('.json_encode($message).');';
echo '<a onclick="' . htmlspecialchars($jscode) . '">Click me</a>';
言われていること... onclick(または他のイベント)属性は2005です。好きなようにして、JavaScriptコードをHTMLコードから、できれば外部ファイルに分離し、DOM関数(またはjQueryうまくいきます)
...onclick="new_func();"...
<script>
function new_func() {
var a = Prompt('new value:','<?php code; ?>');
if (a) { <!--javascript code--> } else { <!--javascript code--> }
}
</script>
onclick="var a = Prompt('New value: ', 'aaaa\"aaa'); if (a != null) { v....
問題は太字で強調表示されています。変数の宣言を引用することはできません。二重引用符は、単一引用符で囲まれているため、削除するとエスケープする必要はありません。このようになります-
onclick="newFunc();"
<script>
function newFunc() {
var a = Prompt('New value: ', 'aaaa"aaa');
if (a != null) { v....
}
</script>
@Marshall Houseがここで言っていることを本当に言い換えていますが、
HTMLでは、二重引用符( ")はalwaysでバックスラッシュに関係なく属性を終了します。つまり、次のようになります:onclick="var a = Prompt('New value: ', 'aaaa\"
。 @Marshallが提供するソリューションは、コードを関数に分離することです。このようにして、エスケープしたPHP=を問題なく印刷できます。
例えば。:
<script>
// This is a function, wrapping your code to be called onclick.
function doOnClickStuff() {
// You should no longer need to escape your string. E.g.:
//var a = Prompt('new value:','<?php echo $rec[$i]; ?>');
// Although the following could be safer
var a = Prompt('new value:',<?php json_encode($rec[$i]); ?>);
if (a) { <!--javascript code--> }
else { <!--javascript code--> }
}
</script>
<someelement onclick="doOnClickStuff();"> <!-- this calls the javascript function doOnClickStuff, defined above -->