首頁 >後端開發 >php教程 >如何透過php來使用http_build_query,parse_url,parse_str建立與解析url

如何透過php來使用http_build_query,parse_url,parse_str建立與解析url

jacklove
jacklove原創
2018-06-09 10:07:401750瀏覽

1.http_build_query

http_build_query 可以建立urlencode之後的請求字串。

string http_build_query ( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )

參數:
query_data
可以是陣列或包含屬性的物件。

一個query_data陣列可以是簡單的一維結構,也可以是由陣列組成的陣列(其依序可以包含其它陣列)。

如果query_data是一個對象,只有public屬性才會加入結果。

numeric_prefix
如果在基礎數組中使用了數字下標同時給出了該參數,則此參數值將會作為基礎數組中的數字下標元素的前綴。

這是為了讓 PHP 或其它 CGI 程式在稍後對資料進行解碼時取得合法的變數名稱。

arg_separator
除非指定並使用了這個參數,否則會用arg_separator.output來分隔參數(php.ini中有此參數,預設為”&”)。

enc_type
預設使用 PHP_QUERY_RFC1738。

如果 enc_type 是 PHP_QUERY_RFC1738,則編碼會以 » RFC 1738 標準和 application/x-www-form-urlencoded 媒體類型編碼,空格會被編碼成加號( )。

如果 enc_type 是 PHP_QUERY_RFC3986,將根據 » RFC 3986 編碼,空格會被百分號編碼( )。
範例1:只使用query_data參數

<?php$data = array(    &#39;name&#39; => &#39;fdipzone&#39;,    &#39;gender&#39; => &#39;male&#39;,    &#39;profession&#39; => &#39;programmer&#39;,    &#39;explain&#39; => &#39;a new programmer&#39;);echo http_build_query($data);?>

#輸出:
name=fdipzone&gender=male&profession=programmer&explain=a new programmer


範例2: query_data使用一維下標數組,指定
numeric_prefix=info_,arg_separator=#,enc_type=PHP_QUERY_RFC3986

<?php$data = array(&#39;fdipzone&#39;,&#39;male&#39;,&#39;programmer&#39;,&#39;a new programmer&#39;);echo http_build_query($data, &#39;info_&#39;, &#39;#&#39;, PHP_QUERY_RFC3986);?>

輸出:

info_0=fdipzone#info_1=male#info_2=programmer#info_3=a%20new%20programmer

2.parse_url

#parse_url 解析url,傳回其組成部分

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

#參數:
url
要解析的url,無效字元將使用_來替換

component
PHP_URL_PATH、 PHP_URL_QUERY 或PHP_URL_FRAGMENT 的其中一個來取得URL 中指定的部分的string。 (除了指定為 PHP_URL_PORT 後,將傳回一個 integer 的值)。

傳回值:
對嚴重不合格的 URL,parse_url() 可能會傳回 FALSE。

傳回的資料一般包含下列幾種
scheme(如http),host,port,user,pass,path,query(問號?之後),fragment(在雜湊符號#之後)
範例:

<?php$url = &#39;http://fdipzone:123456@www.fdipzone.com:80/test/index.php?id=1#tag&#39;;
print_r(parse_url($url));echo parse_url($url, PHP_URL_SCHEME).PHP_EOL;echo parse_url($url, PHP_URL_HOST).PHP_EOL;echo parse_url($url, PHP_URL_PORT).PHP_EOL;echo parse_url($url, PHP_URL_USER).PHP_EOL;echo parse_url($url, PHP_URL_PASS).PHP_EOL;echo parse_url($url, PHP_URL_PATH).PHP_EOL;echo parse_url($url, PHP_URL_QUERY).PHP_EOL;echo parse_url($url, PHP_URL_FRAGMENT).PHP_EOL;?>

#輸出:

#
Array(
    [scheme] => http
    [host] => www.fdipzone.com
    [port] => 80
    [user] => fdipzone
    [pass] => 123456
    [path] => /test/index.php
    [query] => id=1
    [fragment] => tag
)
http
www.fdipzone.com80fdipzone123456/test/index.php
id=1tag

3.parse_str

parse_str 將字串解析成多個變數

void parse_str ( string $str [, array &$arr ] )

如果str 是URL 傳遞入的查詢字串(query string),則將它解析為變數並設定到目前作用域。
參數:
str  
輸入的字串

arr
如果設定了第二個變數arr,變數將會以陣列元素的形式存入這個數組,作為替代。
範例1:解析到目前作用域

<?php$str = &#39;name=fdipzone&gender=male&profession=programer&explain=a new programmer&#39;;
parse_str($str);echo $name.PHP_EOL;echo $gender.PHP_EOL;echo $profession.PHP_EOL;echo $explain.PHP_EOL;?>

輸出:

fdipzone
male
programera new programmer


範例2:結果保存到arr數組

<?php$str = &#39;name=fdipzone&gender=male&profession=programer&explain=a new programmer&#39;;
parse_str($str, $arr);
print_r($arr);?>

輸出:

Array(
    [name] => fdipzone
    [gender] => male
    [profession] => programer
    [explain] => a new programmer
)

4.取得url的query參數並解析

##首先使用parse_url取得query,然後在使用parse_str解析參數

<?php$url = &#39;http://www.fdipzone.com/test/index.php?name=fdipzone&gender=male&profession=programmer&explain=a new programmer&#39;;$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $data);
print_r($data);?>

輸出:

Array(
    [name] => fdipzone
    [gender] => male
    [profession] => programmer
    [explain] => a new programmer
)

這篇文章講解如何透過php來使用http_build_query,parse_url,parse_str建立與解析url,更多相關內容請關注php中文網。

相關推薦:

如何透過html5實現搖晃的功能

如何透過MySql查看與修改auto_increment的方法

如何透過php產生網頁桌面的捷徑
#

以上是如何透過php來使用http_build_query,parse_url,parse_str建立與解析url的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn