【问题标题】:Is it good to use filter_var with htmlentities in PHP?在 PHP 中将 filter_var 与 htmlentities 一起使用好吗?
【发布时间】:2017-01-12 14:34:33
【问题描述】:

我正在验证一个 POST 请求变量,我曾经这样做过:

$email = htmlentities($_POST['email']);

但现在我搜索并了解了 filter_var,我正在做这样的验证:

$email = filter_var(htmlentities($_POST['email']), FILTER_SANITIZE_EMAIL);

哪种方式更好?对于所有类型的输入 [phone - string - etc ..] 我必须使用什么?

对不起,我是初学者,我已经查看了手册,但我不能理解很多。

感谢您的帮助。

【问题讨论】:

  • 用你的代码做测试看看。
  • htmlentities 会将& 转换为&& 是一个有效的电子邮件字符,而; 不是,所以不要使用htmlentities 来验证电子邮件。
  • @apokryfos ,那么我应该在字符串验证中使用什么(如用户名或 cmets..etc)?
  • 这取决于您的规格。如果您想在用户输入它们时详细显示它们,则在发送它们时存储它们并使用htmlentities 转换实体,然后再将它们显示在页面上。如果您想去除标签,请使用 strip_tags()

标签: php


【解决方案1】:

仅对电子邮件使用以下行:

filter_input(INPUT_POST, "email", FILTER_SANITIZE_EMAIL);

这将正确删除电子邮件字符中的非法字符(例如 ; 并保留合法字符,例如 &+

使用htmlentities 可能会将合法的电子邮件地址变成非法的电子邮件地址,然后FILTER_SANITIZE_EMAIL 将被破坏。

如果您正在处理标签或描述的用户输入,那么您可以正常存储所述输入(使用准备好的语句允许数据库正确转义输入)并使用htmlentities 在页面上显示时。或者,您可以使用:

filter_input(INPUT_POST, "description", FILTER_SANITIZE_STRING);

这个字符串净化过滤器去除标签。

您可以在http://php.net/manual/en/filter.filters.sanitize.php查看更多过滤器

【讨论】:

    猜你喜欢
    • 2011-10-21
    • 2019-08-31
    • 2023-04-06
    • 2013-01-25
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2014-02-10
    相关资源
    最近更新 更多