明白了HTTP請求的頭信息后,我們還需要對請求地址有所了解。再者,HTTP GET請求是靠URL實現的,所以了解URL的構造,處理URL的重要性不言而喻。
在PHP中我們用parse_url()函數來處理URL信息。
其函數原型如下:
array parse_url ( string $url [,URL_COSTANT])
本函數解析一個 URL 並返回一個關聯數組,包含在 URL 中出現的各種組成部分。
對嚴重不合格的 URL,parse_url() 可能會返回 FALSE 並發出 E_WARNING。否則會返回一個關聯數組,其組成部分為(至少有一個)
其正確的返回值如下:
scheme http 協議信息 host 主機信息 port 端口號 user 用戶名 pass 密碼 path 站內路徑 query 在問號 ? 之后的查詢信息 fragment 在散列符號 # 之后 錨點信息 Hash信息
下面是一個典型的URL字符串,我們對其用parse_url()解析,並輸出其結果數組。
$url='https://zbs:mypass@www.baidu.com:8080/home/index.html?gender=male&write=code#anchor'; $arr=parse_url($url); array (size=8) 'scheme' => string 'https' 'host' => string 'www.baidu.com' 'port' => int 8080 'user' => string 'zbs' 'pass' => string 'mypass' 'path' => string '/home/index.html' 'query' => string 'gender=male&write=code' 'fragment' => string 'anchor'
另外,我們還可以對第二個參數賦值,指定要返回的URL部分,對應的URL_CONST取值如下:
scheme:PHP_URL_SCHEME,
host:PHP_URL_HOST,
port:PHP_URL_PORT,
user:PHP_URL_USER,
pass:PHP_URL_PASS,
path:PHP_URL_PATH,
query:PHP_URL_QUERY,
fragment:PHP_URL_FRAGMENT.
例如我們要指定返回地址的查詢字段信息:
$url='https://zbs:mypass@www.baidu.com:8080/home/index.html?gender=male&write=code#anchor'; $arr=parse_url($url,PHP_URL_QUERY);//string '/home/index.html
理解了如何拆分URL信息后,我們也更需要學會拼合URL信息,拼合URL信息有一個專門的函數http_build_url(),但此函數因其處理繁瑣,一般較少使用,我們常用字符串來拼合URL,在處理較多的查詢信息(query_string)時,我們會用http_build_query()函數。
http_build_query()函數能幫我們將一個關聯數組快速拼合成一個查詢字符串,它甚至可以將一個對象分析拼合為一個查詢字符串,但要注意,它只能保留修飾符為"public"的"屬性",其余信息將會被舍棄。
例:
$info=['run'=>'10km','eat'=>'3kg']; var_dump(http_build_query($info));//string 'run=10km&eat=3kg' class Msg{ public $attr_public="value_public"; protected $attr_protected="value_protected"; private $attr_private="value_private"; function foo(){ echo "foo"; } } $msg=new Msg(); var_dump(http_build_query($msg));//string 'attr_public=value_public'
另:JS獲取當前url信息:
Location 對象是 Window 對象的一個部分,可通過 window.location 屬性來訪問,它包含了有關當前 URL 的信息。
Location 對象屬性
屬性 描述
hash URL錨點信息
host 主機名和當前 URL 的端口號
hostname 當前URL的主機名
href 完整的URL
pathname 當前URL的路徑部分
port 當前URL的端口號
protocol 當前URL的協議
search 查詢字符串