如何在PHP中正确转义html表单输入默认值?

时间:2011-06-06 07:56:40

标签: php html forms xss

给出以下两个html / php片段:

<input type="text" name="firstname" value="<?php echo $_POST['firstname']; ?>" />

<textarea name="content"><?php echo $_POST['content']; ?></textarea>

我需要为回显的$_POST变量使用什么字符编码?我可以使用任何内置的PHP函数吗?请假设尚未对$_POST值进行编码。没有任何神奇的引用。

4 个答案:

答案 0 :(得分:91)

使用htmlspecialchars($_POST['firstname'])htmlspecialchars($_POST['content'])

在向用户展示字符串之前,始终使用htmlspecialchars()转义字符串。

答案 1 :(得分:4)

htmlspecialchars可以在两种情况下都有效。查看不同的标志选项,以避免引号在input情况下出现问题。

答案 2 :(得分:1)

考虑到我要把它放在一个函数中

<?PHP
function encodeValue ($s) {
    return htmlentities($s, ENT_COMPAT|ENT_QUOTES,'ISO-8859-1', true); 
}
?>

这具有 ENT_QUOTES 以确保对单引号和双引号进行了编码,但也可以编码特殊字符(类似于José),而不是插入空字符串。 / p>

那么您可以做:

<input type="text" name="firstname" value="<?= encodeValue($_POST['firstname']) ?>" />

<textarea name="content"><?= encodeValue($_POST['content']) ?></textarea>

答案 3 :(得分:-2)

我经常使用

<input type="text" name="firstname" value=<?php echo json_encode($_POST['firstname']); ?>/>