我有类似的东西(代码简化):
<?php
$var = 'Read "The Book"';
?>
<input type="text" value="<?php echo $var; ?>" />
问题在于输入看起来好像是打印read
,当你查看源代码时,你看到它有<input type="text" value="Read "The Book"" />
而且它不起作用。
我无法简单地将value="<?php echo $var; ?>"
替换为value='<?php echo $var; ?>'
,因为$var
可能有任何价值,如果我这样做,其值为D'Artagnan
则为<input type="text" value='D'Artagnan' />
试图打印{{1}}。
=(
有什么建议吗?
答案 0 :(得分:3)
您应该通过将具有特殊含义的字符转义到各自的HTML实体来清理所有输出。您可以使用htmlspecialchars
在html上下文中执行此操作。
<input type="text" value="<?php echo htmlspecialchars($var); ?>" />
因此,可以避免XSS攻击。