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 无法工作,从而破坏了代码。使用单个 qoute'可以正常工作。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="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
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

我真的只是重新措辞@Marshall House 在这里说的话,但是:

在 HTML 中,无论反斜杠如何,双引号 (") 将始终结束一个属性 - 所以它会看到: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 -->
于 2011-08-16T22:35:10.587 回答