web-dev-qa-db-ja.com

PHP javascriptの場合)から文字列をエスケープする方法は?

利用できる値を編集できるフォームエディターを想像してみてください。データに_"_文字(二重引用符)が含まれている場合は、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) { 
_
15
user893856

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うまくいきます)

24
shesek
...onclick="new_func();"...
<script>
function new_func() {
    var a = Prompt('new value:','<?php code; ?>');
    if (a) { <!--javascript code--> } else { <!--javascript code--> }
}
</script>
1
Marshall House
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>
1
Marshall House

@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 -->
0
Robin Winslow