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

php使用http_build_query,parse_url,parse_str建立與解析url

WBOY
WBOY原創
2016-07-25 08:46:19996瀏覽

php使用http_build_query,parse_url,parse_str建立與解析url,有需要的朋友可以參考下。


1.http_build_query

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

  1. string http_build_query ( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = =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參數


$data = array(
    'name' => 'fdipzone',
  1. 'gender' => 'male',
  2. 'profession' => 'programmer',
  3. 'explain' => 'a new programmer'
  4. );
  5. echo http_build_query($data);
  6. ?>
  7. 複製程式碼
輸出: name=fdipzone&gender=male&profession=programmer&explain=a new programmer


範例2: query_data使用一維下標數組,指定

numeric_prefix=info_,arg_separator=#,enc_type=PHP_QUERY_RFC3986


$data = array('fdipzone','male','programmer','a new programmer');
    echo http_build_query($data , 'info_', '#', PHP_QUERY_RFC3986);
  1. ?>
  2. 複製程式碼
輸出:

info_0=fdipzone#info_1=male#info_2=programmer#info_3=a new programmer
  1. 複製程式碼
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(在散列符號#之後)

例:
  1. $url = 'http://fdipzone:123456@www.fdipzone.com:80/test/index.php?id=1#tag' ;
  2. print_r(parse_url($url));
  3. echo parse_url($url, PHP_URL_SCHEME).PHP_EOL;
  4. echo parse_url($url,url_URL_HOST).PHP.OL; $url, PHP_URL_PORT).PHP_EOL;
  5. echo parse_url($url, PHP_URL_USER).PHP_EOL;
  6. echo parse_url($url, PHP_URL_PASS).PHP_EOL;echo parse_url($url, PHP_URL_QUERY).PHP_EOL;
  7. echo parse_url($url, PHP_URL_FRAGMENT).PHP_EOL;
  8. ?>
輸出:

Array
(
    [scheme] => http
  1. [host] => www.fdipzone.com
  2. [port] => 80
  3. [user] => fdipzone
  4. [pass] => 123456
  5. [path] => /test/index.php
  6. [query] => id=1
  7. [fragment] => tag
  8. )
  9. http
  10. www.fdipzone.com
  11. 80
  12. fdipzone
  13. 123456
  14. /test/index.php
  15. id=1
  16. tag
  17. 複製程式碼
3.parse_str

parse_str 將字串解析成多個變數

  1. void parse_str ( string $str [, array &$arr ] )
複製程式碼

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


參數:
str
輸入的字串

arr
如果設定了第二個變數arr,變數將會以陣列元素的形式存入這個數組,作為替代。


範例1:解析到目前作用域

  1. $str = 'name=fdipzone&gender=male&profession=programer&explain=a new programmer';
  2. parse_str($strstr);echo $gender.PHP_EOL;
  3. echo $profession.PHP_EOL;
  4. echo $explain.PHP_EOL;
  5. ?>
複製碼🎜> 輸出:

fdipzone
male
    programer
  1. a new programmer
  2. 複製代碼
例子2:結果保存到arr數組



$str = 'name=fdipzone&gender=male&profession=programer&explain=a new programmer';
    parse_str($str, $arr($ print_r($arr);
  1. ?>
  2. 複製程式碼
輸出:

Array
(
[name] => fdipzone
    [gender] => male
  1. [profession] => programer
  2. [explain] => a new programmer
  3. )
  4. 複製程式碼
4.取得url的query參數並解析
先使用parse_url取得query,然後在使用parse_str解析參數

$url = 'http://www.fdipzone.com/test/index.php?name=fdipzone&gender=male&profession=programmer&explain=a new programmer' ;
$query = parse_url($url, PHP_URL_QUERY);
    parse_str($query, $data);
  1. print_r($data);
  2. ?>
  3. ?>
複製程式碼

輸出:
  1. Array
  2. (
  3. [name] => fdipzone
  4. [gender] => male
  5. [profession] => programmer
  6. [explain] => a new programmer
)
複製程式碼
php, http


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