栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

FILTER_SANITIZE_STRING是做什么的?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

FILTER_SANITIZE_STRING是做什么的?

根据PHP手册:

剥离标签,可选择剥离或编码特殊字符。

根据W3Schools:

The FILTER_SANITIZE_STRING
过滤条或编码不需要的字符。

该过滤器将删除可能对您的应用程序有害的数据。它用于剥离标签并删除或编码不需要的字符。

现在,这并不能告诉我们太多。我们来看一些PHP源代码。

ext/filter/filter.c

static const filter_list_entry filter_list[] = {              { "string",          FILTER_SANITIZE_STRING,        php_filter_string          },      { "stripped",        FILTER_SANITIZE_STRING,        php_filter_string          },      { "enpred",         FILTER_SANITIZE_ENCODED,       php_filter_enpred         },      

现在,让我们看看如何

php_filter_string
定义。
ext/filter/sanitizing_filters.c

void php_filter_string(PHP_INPUT_FILTER_PARAM_DECL){    size_t new_len;    unsigned char enc[256] = {0};        php_filter_strip(value, flags);    if (!(flags & FILTER_FLAG_NO_ENCODE_QUOTES)) {        enc['''] = enc['"'] = 1;    }    if (flags & FILTER_FLAG_ENCODE_AMP) {        enc['&'] = 1;    }    if (flags & FILTER_FLAG_ENCODE_LOW) {        memset(enc, 1, 32);    }    if (flags & FILTER_FLAG_ENCODE_HIGH) {        memset(enc + 127, 1, sizeof(enc) - 127);    }    php_filter_enpre_html(value, enc);        new_len = php_strip_tags_ex(Z_STRVAL_P(value), Z_STRLEN_P(value), NULL, NULL, 0, 1);    Z_STRLEN_P(value) = new_len;    if (new_len == 0) {        zval_dtor(value);        if (flags & FILTER_FLAG_EMPTY_STRING_NULL) { ZVAL_NULL(value);        } else { ZVAL_EMPTY_STRING(value);        }        return;    }}

我将跳过注释标记,因为它们已经在Internet上得到了解释(如您所说),而将注意力集中在 始终 执行的内容上,而记录的内容并不多。

第一-

php_filter_strip
。它并没有做太多事情,只是获取传递给函数的标志并进行相应处理。它做有据可查的东西。

然后我们构造某种地图并调用

php_filter_enpre_html
。它更有趣:它转换的东西一样
"
'
&
并与他们的ASCII码字符低于32和高于127为HTML实体,所以
&
在你的字符串变成
&
。同样,它为此使用标志。

然后,我们调用to

php_strip_tags_ex
,它只剥离HTML,XML和PHP标记(根据中的定义
/ext/standard/string.c
)并删除NULL字节,如注释中所述。

它后面的代码用于内部字符串管理,实际上并没有进行任何清理。好吧,不完全是,如果清理过的字符串为空,则传递未记录的标志

FILTER_FLAG_EMPTY_STRING_NULL
将返回
NULL
,而不是仅返回一个空字符串,但这并不是那么有用。一个例子:

var_dump(filter_var("yo", FILTER_SANITIZE_STRING, FILTER_FLAG_EMPTY_STRING_NULL));var_dump(filter_var("", FILTER_SANITIZE_STRING, FILTER_FLAG_EMPTY_STRING_NULL));var_dump(filter_var("yo", FILTER_SANITIZE_STRING));var_dump(filter_var("", FILTER_SANITIZE_STRING));

string(2) "yo"NULLstring(2) "yo"string(0) ""

没有更多的事情要做,因此手册是相当正确的-总结一下:

  • 始终:剥离HTML,XML和PHP标记,剥离NULL字节。
  • FILTER_FLAG_NO_ENCODE_QUOTES
    -此标志不编码引号。
  • FILTER_FLAG_STRIP_LOW
    -去除ASCII值低于32的字符。
  • FILTER_FLAG_STRIP_HIGH
    -去除ASCII值大于127的字符。
  • FILTER_FLAG_ENCODE_LOW
    -使用ASCII值小于32的字符进行编码。
  • FILTER_FLAG_ENCODE_HIGH
    -编码ASCII值大于127的字符。
  • FILTER_FLAG_ENCODE_AMP
    -将&字符编码为
    &
    (不是
    &
    )。
  • FILTER_FLAG_EMPTY_STRING_NULL
    -返回
    NULL
    而不是空字符串。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/435406.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号