用于筛选常见文本字段的PHP本机函数


PHP Native Function to Filter Common Text Fields

是否有本地PHP函数用于拒绝来自简单文本字段的无效$_POST数据?

目前,我在正则表达式中使用自定义过滤函数,如果可能的话,我真的很想简化我的代码。

例如,假设我有一个用于输入姓氏的表单字段。我想检查提交的值,如果它包含任何无效字符,则立即拒绝输入。

以下是我考虑PHP函数的标准:

  • 一个人的姓氏可能是"Smith Johnson"、"Van Buren"、"O'Malley"等,因此函数需要允许空格、连字符、撇号等。

  • 我的目标是测试输入并立即拒绝它,而不是对它进行净化并通过额外的过滤器和处理步骤运行它。

  • 我想捕捉的两个输入示例是:

    username' --
    username; DELETE FROM users;
    

以下是我知道的选项,以及为什么我对使用它们心存疑虑。。。

  1. is_string():此函数似乎无法捕获上面的两个示例中的任何一个

  2. addslashes():此函数不符合的第二个标准

  3. htmlenties(),htmlspecialchar():与addslashes()相同;如果输入无效,我不想继续使用它,即使它是经过消毒的

  4. strip_tags():不符合第二个标准,但优于#3,因为它消除了不需要的字符,而不是清除它们

  5. filter_put(…filter_ANITIZE_STRING):据我所知,这与strip_tags()相同。**

  6. ctype_alpha(),ctype_alnum():由于不允许使用空格和其他字符,因此不符合第一个条件。

  7. Regex/Custom函数:这是我一直在使用的函数。我真的更喜欢简化我的代码并消除(尽管是最小的)regex开销。

--

**只是好奇:PECL是否使filter_put()比strip_tags()更快?

没有这样的函数。你基本上是在问,当一个字符串和另一个字符串都是具有复杂条件的字符串时,如何区分它们。对于"原生"函数来说,这是一项相当模糊的任务。

实现这一点的最"原生"的方法是使用正则表达式,而这正是您已经在做的。

这也违反了意识形态,因为$_POST和$_GET应该以其原始形式表示参数,而不是在通过一些验证之后。

我总是使用正则表达式来验证表单输入。如果你感兴趣的话,我有一整套表单验证和创建功能,这些功能是我多年来开发的。