use*_*856 14 javascript php 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) {
Run Code Online (Sandbox Code Playgroud)
she*_*sek 25
onclick应该像使用任何其他HTML属性一样对属性的值进行转义htmlspecialchars().代码中的实际Javascript字符串应使用编码json_encode().例如:
<?php
$message = 'Some \' problematic \\ chars " ...';
$jscode = 'alert('.json_encode($message).');';
echo '<a onclick="' . htmlspecialchars($jscode) . '">Click me</a>';
Run Code Online (Sandbox Code Playgroud)
那就是说... onclick(或任何其他事件)属性是如此2005年.帮自己一个忙,将你的javascript代码从你的html代码中分离出来,最好是外部文件,并使用DOM函数(或jQuery,包装)附加事件它很好)
小智 1
onclick="var a = prompt('New value: ', 'aaaa\"aaa'); if (a != null) { v....
Run Code Online (Sandbox Code Playgroud)
您的问题以粗体突出显示。您不能引用变量声明,一旦删除双引号,您就不需要转义双引号,因为它位于单引号内。应该看起来像这样 -
onclick="newFunc();"
<script>
function newFunc() {
var a = prompt('New value: ', 'aaaa"aaa');
if (a != null) { v....
}
</script>
Run Code Online (Sandbox Code Playgroud)