URL を解釈し、その構成要素を返す

# parse_url

(PHP 4, PHP 5, PHP 7)

parse_url — URL を解釈し、その構成要素を返す

### 説明

parse_url ( string `$url` [, int `$component` = -1 ] ) : mixed

この関数は、URL の様々な構成要素のうち特定できるものに関して 連想配列にして返します。

この関数は、指定された URL が有効かどうかを調べるためのもの ではなく、単に URL を上で示した 要素に分解するだけのものです。不完全な URL であっても受け入れられますし、 そのような場合でも parse_url() は可能な限り 正しく解析しようとします。

### パラメータ

`url`

  パースする URL。無効な文字は _ に置換されます。

`component`

  `PHP_URL_SCHEME`、 `PHP_URL_HOST`、`PHP_URL_PORT`、 `PHP_URL_USER`、`PHP_URL_PASS`、 `PHP_URL_PATH`、`PHP_URL_QUERY` あるいは `PHP_URL_FRAGMENT` のうちのいずれかを指定し、 特定の URL コンポーネントのみを文字列 (`PHP_URL_PORT` を指定した場合だけは整数値) で取得するようにします。

### 返り値

完全におかしな形式の URL については、parse_url() は `FALSE` を返します。

`component` を省略した場合は、連想配列を返します。 連想配列の中には少なくともひとつの要素が含まれます。 この配列に含まれる可能性のある要素は次のとおりです。

- scheme - 例: http
- host
- port
- user
- pass
- path
- query - クエスチョンマーク ? 以降
- fragment - ハッシュマーク # 以降

`component` が指定されている場合、 parse_url() は配列ではなく文字列 (`PHP_URL_PORT` の場合は整数値) を返します。 要求したコンポーネントが指定した URL の中にない場合は `NULL` を返します。

### 変更履歴

バージョン | 説明
--- | ---
5.4.7 | host の認識方法を修正し、 scheme を省略してコンポーネント区切りから始まる場合にも対応するようになりました。
5.3.3 | URL のパースに失敗したときに `E_WARNING` を発生させないようになりました。
5.1.2 | パラメータ `component` が追加されました。

### 例

例1 parse_url() の例

`<?php
$url = 'http://username:password@hostname:9090/path?arg=value#anchor';
var_dump(parse_url($url));
var_dump(parse_url($url, PHP_URL_SCHEME));
var_dump(parse_url($url, PHP_URL_USER));
var_dump(parse_url($url, PHP_URL_PASS));
var_dump(parse_url($url, PHP_URL_HOST));
var_dump(parse_url($url, PHP_URL_PORT));
var_dump(parse_url($url, PHP_URL_PATH));
var_dump(parse_url($url, PHP_URL_QUERY));
var_dump(parse_url($url, PHP_URL_FRAGMENT));
?>`

上の例の出力は以下となります。

    array(8) {
      ["scheme"]=>
      string(4) "http"
      ["host"]=>
      string(8) "hostname"
      ["port"]=>
      int(9090)
      ["user"]=>
      string(8) "username"
      ["pass"]=>
      string(8) "password"
      ["path"]=>
      string(5) "/path"
      ["query"]=>
      string(9) "arg=value"
      ["fragment"]=>
      string(6) "anchor"
    }
    string(4) "http"
    string(8) "username"
    string(8) "password"
    string(8) "hostname"
    int(9090)
    string(5) "/path"
    string(9) "arg=value"
    string(6) "anchor"

例2 parse_url() でスキームを省略した例

`<?php
$url = '//www.example.com/path?googleguy=googley';
// 5.4.7 より前のバージョンでは、パスを "//www.example.com/path" のように表示していました
var_dump(parse_url($url));
?>`

上の例の出力は以下となります。

    array(3) {
      ["host"]=>
      string(15) "www.example.com"
      ["path"]=>
      string(5) "/path"
      ["query"]=>
      string(17) "googleguy=googley"
    }

### 注意

> 注意:

> この関数は相対 URL では動作しません。

> 注意:

> parse_url() は URL をパースするための関数であり、 URI をパースするものではありません。しかし、PHP の後方互換性を満たすため、 例外として file:// スキームについては 3 重スラッシュ(file:///...) が認められています。他のスキームにおいては、これは無効な形式となります。

### 参考

- pathinfo() - ファイルパスに関する情報を返す
- parse_str() - 文字列を処理し、変数に代入する
- http_build_query() - URL エンコードされたクエリ文字列を生成する
- dirname() - 親ディレクトリのパスを返す
- basename() - パスの最後にある名前の部分を返す
- » RFC 3986