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

2022-08-30 17:41:52

让我们想象一个表单编辑器,它可以编辑可用的值。如果数据包含字符(双引号),则会“破坏”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,它工作正常。 做同样的事情。如何转义任何字符串,使其不会破坏javascript?'mysql real escape


json_encode看起来不错,但我一定是做错了什么,它仍然很糟糕:这是Firefox如何看待它的屏幕截图 - 它插入了一个“坏”的双引号!该值只是一个简单的数字:

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

我确实用过:

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

答案 1

该属性的值应像任何其他 HTML 属性一样使用 htmlspecialchars() 进行转义。代码中的实际 Javascript 字符串应使用 json_encode() 进行编码。例如:onclick

<?php
$message = 'Some \' problematic \\ chars " ...';
$jscode = 'alert('.json_encode($message).');';
echo '<a onclick="' . htmlspecialchars($jscode) . '">Click me</a>';

话虽如此...onclick(或任何其他事件)属性都是2005年。帮自己一个忙,将javascript代码与html代码分开,最好是外部文件,并使用DOM函数(或jQuery,它很好地包装它)附加事件


答案 2
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>