REQUEST_URIを分解する

phpだと$_SERVER['REQUEST_URI']でリクエストされたURIを取得できる。このREQUEST_URI相対パスが入るかと思っていたけど、絶対パス(http://~)が入る場合もあるらしい。

で、phpでURLを分解する関数にparse_urlが用意されているけど、この関数は原則絶対パスを渡さないといけないらしく、相対パスだと動作保証されないらしい。しかし動作確認してみた限り、相対パスでも特に問題はなさそうな感じ。

<?php
// /sample/index.html?a=b
$url = parse_url($_SERVER['REQUEST_URI']);
pr($url);

結果

Array
(
    [path] => /sample/index.html
    [query] => a=b
)

queryのある場合は、urlencodeを忘れないこと。

PHP の $_SERVER['REQUEST_URI'] と parse_url() の予想外な動作について。 - こせきの技術日記