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

发布于 2024-11-14 04:01:45 字数 385 浏览 0 评论 0原文

给定以下两个 HTML/PHP 片段:

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

以及

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

我需要对回显的 $_POST 变量使用什么字符编码?我可以使用任何内置 PHP 函数吗?

请假设 $_POST 值尚未编码。没有神奇的引言——什么也没有。

Given the following two HTML/PHP snippets:

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

and

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

what character encoding do I need to use for the echoed $_POST variables? Can I use any built-in PHP functions?

Please assume that the $_POST values have not been encoded at all yet. No magic quotes - no nothing.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

秋千易 2024-11-21 04:01:45

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

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

Use htmlspecialchars($_POST['firstname']) and htmlspecialchars($_POST['content']).

Always escape strings with htmlspecialchars() before showing them to the user.

你的他你的她 2024-11-21 04:01:45

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

htmlspecialchars would work in both cases. Have a look at the different flag options to avoid quotation marks being a problem in the input case.

伴我心暖 2024-11-21 04:01:45

鉴于它有点长,我会把它放在一个函数中,

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

它有ENT_QUOTES来确保对单引号和双引号进行编码,但它也会对特殊字符进行编码(就像José中的那样) ) 而不是插入空字符串。

然后你可以这样做:

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

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

Given it is kinda long I would put it in a function

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

This has ENT_QUOTES to make sure single and double quotes are encoded, but it will also encode special characters (Like in José) instead of inserting an empty string.

Then you can do:

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

and

<textarea name="content"><?= encodeValue($_POST['content']) ?></textarea>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文