小编Kib*_*ele的帖子

filter_input()$ _SERVER ["REQUEST_URI"],带有FILTER_SANITIZE_URL

我正在过滤$ _SERVER ["REQUEST_URI"],以便:

$_request_uri = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL);
Run Code Online (Sandbox Code Playgroud)

正如php.net中所解释的:

FILTER_SANITIZE_URL

删除除字母,数字和$ -_之外的所有字符.+!*'(),{} |\^〜[]`<>#%"; /?:@&=.

然而,

浏览器发送此REQUEST_URI值urlencode'd,因此在此filter_input()函数中未对其进行清理.说地址是

http://www.example.com/abc/index.php?q=abc 123

然后是已清理的请求网址

/abc/index.php?q=abc%EF%BF%BD%EF%BF%BD123

但它应该是

/abc/index.php?q=abc123

有可能urldecode($ _ SERVER ["REQUEST_URI"])然后使用filter_var()我们可以获得一个已清理的值.

$_request_uri = filter_var(urldecode($_SERVER['REQUEST_URI']), FILTER_SANITIZE_URL);
Run Code Online (Sandbox Code Playgroud)

我不知道为什么最后一个在我看来"不优雅"而且我正在寻找一种优雅的方式,消毒$ _SERVER ["REQUEST_URI"].

也许,在编码时直接访问超级全局数组($ _SERVER ['REQUEST_URI'])会让我感到不安,因此"不优雅".

有优雅的方式吗?

php filtering global-variables input-sanitization request-uri

6
推荐指数
1
解决办法
7809
查看次数