简短的问题:
echo '<button type="button" id="add" onClick="addAsset('.$filename.');"> '.$filename.' </button>';
这将创建一个带有onClick函数addAsset(example.png)的按钮;但是我想让addAsset("example.png")如何转义" 字符?
谢谢!
您可以尝试以下操作:
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 ; ?>
的缩写。在从 HTML 转义中了解有关所有这些的更多信息
编辑2:此外,正如@deceze所建议的那样,如果变量$filename
可能包含引号或某些内容,您可以使用htmlentities()
,如果值filename
,它将保护您免受XSS的侵害 是来自用户的输入。您可以像下面这样使用它:
<button type="button" id="add" onClick="addAsset('<?= htmlentities($filename) ?>');"><?= htmlentities($filename) ?></button>
此外,请查看下面的@deceze答案,以更好地了解如何在此特殊情况下保护您的代码免受 xss 的侵害。
使用转义的单引号'
:
echo '<button type="button" id="add" onClick="addAsset(''.$filename.'');"> '.$filename.' </button>';
你想要最终的结果是:
<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
包含不需要的字符。onClick
属性的值必须是有效的 Javascript 和有效的 HTML。所以:
printf('<button type="button" id="add" onClick="%s"> %s </button>',
htmlspecialchars(sprintf('addAsset(%s)', json_encode($filename))),
htmlspecialchars($filename));