简短的问题:
echo '<button type="button" id="add" onClick="addAsset('.$filename.');"> '.$filename.' </button>';
这会创建一个带有onClick函数的按钮addAsset(example.png); 但是我想要addAsset(“example.png”)如何逃脱“角色?”
谢谢!
答案 0 :(得分:2)
您最终想要的最终结果是:
<button type="button" id="add" onClick="addAsset("example.png");"> example.png </button>
否则您将破坏HTML语法。另一种选择是无冲突的报价:
<button type="button" id="add" onClick="addAsset('example.png');"> example.png </button>
但是,如果$filename
包含不受欢迎的字符,您仍然必须escape/encode your input correctly。 onClick
属性的值必须是有效的Javascript,和有效的HTML。所以:
printf('<button type="button" id="add" onClick="%s"> %s </button>',
htmlspecialchars(sprintf('addAsset(%s)', json_encode($filename))),
htmlspecialchars($filename));
答案 1 :(得分:1)
使用转义单引号\'
:
echo '<button type="button" id="add" onClick="addAsset(\''.$filename.'\');"> '.$filename.' </button>';
答案 2 :(得分:1)
您可以尝试以下方式:
echo '<button type="button" id="add" onClick="addAsset(\''.$filename.'\');"> '.$filename.' </button>';
所以,而不是转义"
双引号。我们正在逃避'
单引号。在阅读html输出时哪个更清楚。
编辑:更好的方法是在php块之外编写html块,如下所示:
<?php
//Your PHP COde
?>
<button type="button" id="add" onClick="addAsset('<?= $filename ?>');"><?= $filename ?></button>
<?php
//More PHP COde
?>
正如您所看到的那样,它将更具可读性,并且不需要转义。正如您可能会注意到这使用了<?= $filename ?>
,这只是<?php echo $filename ; ?>
的缩写。在Escaping from HTML
编辑2:另外,正如@deceze建议的那样,如果变量$filename
可能包含引号或某些内容,您可以使用htmlentities()
来保护您,它会保护您如果filename
的值,则针对XSS
是来自用户的输入。你可以像下面这样使用它:
<button type="button" id="add" onClick="addAsset('<?= htmlentities($filename) ?>');"><?= htmlentities($filename) ?></button>
此外,请检查下面的@deceze's Answer,以便更好地了解如何在特定情况下保护代码免受xss的侵害。