7

次のように $_SERVER["REQUEST_URI"] をフィルタリングしています。

$_request_uri = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_URL);

php.netで説明されているように:

FILTER_SANITIZE_URL

文字、数字、および $-_.+!*'(),{}|\^~[]`<>#%";/?:@&= を除くすべての文字を削除します。

でも、

ブラウザはこの REQUEST_URI 値を urlencode で送信するため、この filter_input() 関数ではサニタイズされません。住所は

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

そして、サニタイズされたリクエスト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']) に直接アクセスすると邪魔になるので、「エレガント」ではありません。

エレガントな方法はありますか?

4

1 に答える 1