转义"字符在 php 中带有回声



简短的问题:

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(&quot;example.png&quot;);"> 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));

最新更新