24

フォーム エディターを想像してみましょう。使用可能な値を編集できます。データに"文字 (二重引用符) が含まれていると、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 が機能しなくなり、コードが台無しになります。シングルクォート'で問題なく動作します。mysql real escape同じことをします。javascriptを台無しにしないように文字列をエスケープする方法は?


json_encode は問題ないように見えましたが、私は何か間違ったことをしているに違いありません。それでもまだ悪いです: Firefox がそれをどのように認識するかのスクリーンショットを次に示します - 「悪い」二重引用符が挿入されます! 値は単純な数値です。

http://img402.imageshack.us/img402/5577/aaaahf.gif

そして私は使用しました:

('Ird be az új nevet:', <?php echo json_encode($rec['NAME']); ?>); if (a) { 
4

4 に答える 4

40

属性の値は、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)を使用してイベントを添付してください。綺麗に上がります)

于 2011-08-16T22:39:21.370 に答える
1
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>
于 2011-08-16T22:16:13.677 に答える
1
...onclick="new_func();"...
<script>
function new_func() {
    var a = prompt('new value:','<?php code; ?>');
    if (a) { <!--javascript code--> } else { <!--javascript code--> }
}
</script>
于 2011-08-16T22:27:54.170 に答える
1

私は本当に @Marshall House がここで言っていることを言い直していますが、

HTML では、バックスラッシュに関係なく、二重引用符 (") は常にonclick="var a = prompt('New value: ', 'aaaa\"属性を終了します。つまり、次のようになります。問題なく。

例えば:

<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 -->
于 2011-08-16T22:35:10.587 に答える