在PHP中使用带有htmlentities的filter_var是否合适?

时间:2017-01-12 14:34:33

标签: php

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

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

但是现在我搜索并了解了filter_var并且我正在进行这样的验证:

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

哪种方式更好?并为所有类型的输入[电话 - 字符串 - 等..]我必须使用什么?

对不起,我是初学者,我已查看过手册,但我无法理解。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

/* Used by NHibernate to cast between string and type-safe-enum */
public class MyCustomEnumType : IUserType
{

    ...

    public SqlType[] SqlTypes
    {
        get { 
            return new[] {                   
                // not working for NHibernate 4.1
                //NHibernateUtil.String.SqlType 
                SqlTypeFactory.GetString(200)
            }; 
        }
    }        

    ...
}

这将正确删除电子邮件字符中的非法字符(例如filter_input(INPUT_POST, "email", FILTER_SANITIZE_EMAIL); )并保留合法字符,例如;&

使用+可能会将合法的电子邮件地址变为非法的,htmlentities将会中断。

如果您正在处理标签或说明的用户输入,那么您可以正常存储所述输入(使用预准备语句以允许DB正确地转义输入)并使用FILTER_SANITIZE_EMAIL < strong>在页面上显示时。或者,您可以使用:

htmlentities

这是字符串清理过滤器剥离标签。

您可以在http://php.net/manual/en/filter.filters.sanitize.php

查看更多过滤条件