次のように $_SERVER["REQUEST_URI"] をフィルタリングしています。
$_request_uri = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL);
php.netで説明されているように:
FILTER_SANITIZE_URL
文字、数字、および $-_.+!*'(),{}|\^~[]`<>#%";/?:@&= を除くすべての文字を削除します。
でも、
ブラウザはこの REQUEST_URI 値を urlencode で送信するため、この filter_input() 関数ではサニタイズされません。住所は
そして、サニタイズされたリクエストURLは
/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']) に直接アクセスすると邪魔になるので、「エレガント」ではありません。
エレガントな方法はありますか?