如何从PHP中为javascript转义字符串?

时间:2011-08-16 22:07:22

标签: php javascript escaping addslashes

让我们想象一下表单编辑器,它可以编辑可用的值。如果数据包含"字符(双引号),则“破坏”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 个答案:

答案 0 :(得分:23)

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)附加事件,很好地包装了它)

答案 1 :(得分: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>

答案 2 :(得分:1)

...onclick="new_func();"...
<script>
function new_func() {
    var a = prompt('new value:','<?php code; ?>');
    if (a) { <!--javascript code--> } else { <!--javascript code--> }
}
</script>

答案 3 :(得分:0)

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

在HTML中,双引号(“)将总是结束一个属性,无论反斜杠如何 - 所以它看到:onclick="var a = prompt('New value: ', 'aaaa\"。@ Marshall提供的解决方案是分离你的代码输出到一个函数。这样你可以毫无问题地将转义的PHP打印到它中。

E.g:

<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 -->