filter_var与htmlentities与htmlspecialchars的区别

18

免责声明

这不是一个关于我们是否应该为数据库输入进行转义的问题。这仅仅是在技术层面上看三个标题中函数之间的区别。

这个问题讨论了htmlentities()htmlspecialchars()之间的区别。但是,它并没有真正讨论filter_var(),而我在谷歌上找到的信息更多的是“确保在echo之前转义用户输入!”

我的问题是:

  • 为什么常用htmlspecialchars()htmlentities()而不是filter_var()
  • 使用filter_var()会有性能损失吗?
  • filter_var()是否不像其他两个选项那样安全?
  • 除了以下代码对用户输入进行编码以被echod外,还有什么其他原因不使用它?

filter_var($var, FILTER_SANITIZE_FULL_SPECIAL_CHARS);


1
htmlentities/htmlspecialchars 允许您通过将第四个参数设置为 false 来防止双重编码实体。我不确定是否可以通过 filter_var 实现这一点。 - ryanve
1个回答

11

我猜(关于缺乏采用)的原因可能仅仅是因为自v5.2以来,Filter扩展仅默认启用,而html*方法已经存在更长时间。


1
我想缺乏采用率可能是这样的原因。但是,如果html*方法没有问题,那么为什么PHP内部团队觉得有必要创建filter_var呢? - Charles Sprayberry
1
因为 filter_var 做的不仅仅是 HTML 转义。 - Stephen
那么,为什么需要将这个特定的功能添加到filter_var()中呢? - Charles Sprayberry
11
因为它允许开发人员使用相同的过滤方法和不同的参数进行各种过滤和净化,而无需调用具有不同参数的不同方法。 - Stephen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接