我正在过滤 $_SERVER["REQUEST_URI"] 这样:
$_request_uri = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL);
如php.net中所述:
FILTER_SANITIZE_URL
删除除字母、数字和 $-_.+!*'(),{}|\^~[]`<>#%";/?:@&= 之外的所有字符。
然而,
浏览器发送此 REQUEST_URI 值 urlencode'd,因此在此 filter_input() 函数中未对其进行清理。说地址是
然后经过清理的请求网址是
/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);
我不知道为什么最后一个在我看来“不优雅”,我正在寻找一种优雅的方式来清理 $_SERVER["REQUEST_URI"]。
也许,在编码时直接访问超级全局数组 ($_SERVER['REQUEST_URI']) 会打扰我,因此“不雅”。
有没有优雅的方法?