在PHP中使用echo转义字符

简短问题:

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?&gt ;,这只是<?php echo $filename的缩写; ?>.在Escaping from HTML中了解更多有关这方面的信息

编辑2:另外,正如@deceze建议的那样,如果变量$filename可能包含引号或您可以使用htmlentities()的某些东西,它将保护您免受XSS的侵害,如果filename的值
 是用户的输入.您可以像下面这样使用它:

<button type="button" id="add" onClick="addAsset('<?= htmlentities($filename) ?>');"><?= htmlentities($filename) ?></button>

此外,在这种特殊情况下,请查看下面的@deceze’s Answer,以更好地了解如何保护代码免受xss的侵害.

上一篇:PHP-我如何反向escapeshellarg?


下一篇:【NOIP2000】【Luogu1019】单词接龙