parse_url

(PHP 4, PHP 5, PHP 7, PHP 8)

parse_url解析 URL,返回其組成部分

說(shuō)明

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

本函數(shù)解析一個(gè) URL 并返回一個(gè)關(guān)聯(lián)數(shù)組,包含在 URL 中出現(xiàn)的各種組成部分。

本函數(shù)不是用來(lái)驗(yàn)證給定 URL 的合法性的,只是將其分解為下面列出的部分。不完整的 URL 也被接受,parse_url() 會(huì)嘗試盡量正確地將其解析。

參數(shù)

url

要解析的 URL。無(wú)效字符將使用 _ 來(lái)替換。

component

指定 PHP_URL_SCHEMEPHP_URL_HOST、 PHP_URL_PORT、 PHP_URL_USER、 PHP_URL_PASS、 PHP_URL_PATH、 PHP_URL_QUERYPHP_URL_FRAGMENT 的其中一個(gè)來(lái)獲取 URL 中指定的部分的 string。 (除了指定為 PHP_URL_PORT 后,將返回一個(gè) integer 的值)。

返回值

對(duì)嚴(yán)重不合格的 URL,parse_url() 可能會(huì)返回 false。

如果省略了 component 參數(shù),將返回一個(gè)關(guān)聯(lián)數(shù)組 array,在目前至少會(huì)有一個(gè)元素在該數(shù)組中。數(shù)組中可能的鍵有以下幾種:

  • scheme - 如 http
  • host
  • port
  • user
  • pass
  • path
  • query - 在問號(hào) ? 之后
  • fragment - 在散列符號(hào) # 之后

如果指定了 component 參數(shù), parse_url() 返回一個(gè) string (或在指定為 PHP_URL_PORT 時(shí)返回一個(gè) integer)而不是 array。如果 URL 中指定的組成部分不存在,將會(huì)返回 null

更新日志

版本 說(shuō)明
5.4.7 修復(fù)了 host協(xié)議 省略時(shí)的識(shí)別。
5.3.3 在 URL 解析失敗時(shí)將不會(huì)產(chǎn)生 E_WARNING 級(jí)別的錯(cuò)誤。
5.1.2 增加了參數(shù) component

范例

示例 #1 parse_url() 例子

<?php
$url 
'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));

echo 
parse_url($urlPHP_URL_PATH);
?>

以上例程會(huì)輸出:

Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)
/path

示例 #2 parse_url() 解析丟失協(xié)議的例子

<?php
$url 
'//www.example.com/path?googleguy=googley';

// 在 5.4.7 之前這會(huì)輸出路徑 "http://www.example.com/path"
var_dump(parse_url($url));
?>

以上例程會(huì)輸出:

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

注釋

注意:

本函數(shù)不能用于相對(duì) URL。

注意:

parse_url() 是專門用來(lái)解析 URL 而不是 URI 的。不過(guò)為遵從 PHP 向后兼容的需要有個(gè)例外,對(duì) file:// 協(xié)議允許三個(gè)斜線(file:///...)。其它任何協(xié)議都不能這樣。

參見