首页 > 解决方案 > 有没有办法防止制表符被 FILTER_FLAG_STRIP_LOW 选项过滤?

问题描述

它们是正则表达式还是更好的方法来删除 php filter_var 函数的 FILTER_SANITIZE_STRING 过滤器 FILTER_FLAG_STRIP_LOW 选项所做的相同字符,除了制表符?

有关 FILTER_SANITIZE_STRING 过滤器和 FILTER_FLAG_STRIP_LOW 选项,请参见https://www.php.net/manual/en/filter.filters.sanitize.php

我正在使用带有 FILTER_SANITIZE_STRING 过滤器和 FILTER_FLAG_NO_ENCODE_QUOTES、FILTER_FLAG_STRIP_LOW、FILTER_FLAG_STRIP_HIGH 选项的 php filter_var 函数来删除相当多的字符和“单词”模式,但它也删除了我不想删除的制表符。

如果有去除制表符以外的“低”字符的好方法,那么我可以从 filter_var 调用中删除 FILTER_FLAG_STRIP_LOW 过滤器选项,并将结果“馈送”到正则表达式替换“过滤器”或更好,然后“完成”验证。

标签: phpstringvalidationfilter-var

解决方案


是的,使用 preg_replace 您可以删除制表符 (\x09) 以外的“低”字符。

$input = "ab \x00\x01\t\r\nAcd0\x19";
$santtizeString = preg_replace('~[\x00-\x08\x0A-\x1F]~u','',$input);

$ 输入的十六进制表示法是

\x61\x62\x20\x00\x01\x09\x0d\x0a\x41\x63\x64\x30\x19

除制表符 \x09 外,所有带有代码 <\x20 的字符都将被删除。结果是一个十六进制表示法

\x61\x62\x20\x09\x41\x63\x64\x30

或作为字符串“ab \tAcd0”。


推荐阅读