2014-05-09 74 views
1

我有問題關於PHP 5 所以這裏http_build_query功能的問題是: 我有一些數據,比如像這樣:如何使用http_build_query? (例如)

$data = array(
        'cat1'=>'billy', 
        'cat2'=>'james deen', 
        'cat3'=>'van helsing' 
        ); 

,我想從這些網站的URL字符串,我我正在使用http_build_query,這正是我需要的,但有一個問題,空格字符被替換爲+符號,但我需要'%20'符號,所以我做了一些研究並php manual告訴我,我可以設置enc_type參數:

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

但我不知道exactlt如何使用它 我想是這樣的:

$urlstring = http_build_query($data [ int $enc_type = PHP_QUERY_RFC 3986 ]) . "\n"; 

像這樣:

$urlstring = http_build_query($data [, int $enc_type = PHP_QUERY_RFC 3986 ]) . "\n"; 

和這樣也:

$urlstring = http_build_query($data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC 3986 ]]]) . "\n"; 

,但我總是得到錯誤 - 意外」, ',期待']'或意想不到的T_VARIABLE,期待']'(當我刪除komma) 所以任何人都可以告訴我我做錯了什麼? 我該怎麼做才能正確設置enc_type?

最終版本我想要得到的是:cat1=billy&cat2=james%20deen&cat3=van%20helsing

+0

什麼是你的PHP版本? **注意:PHP 5.4 =>添加了enc_type參數。** –

+0

學習閱讀文檔:在docs:'functionName(paramType $ param1 [,$ optionalParam = null]);'所以你調用'functionName($ param1,$ param2)'或'functionName($ param1)' – Justinas

+0

我有5.5.3版本 – user3371961

回答

6

這裏的問題是,你誤解了文檔中的函數簽名。讓我爲你翻譯它。

  • string - 該函數返回字符串
  • http_build_query - 的函數名
  • mixed $query_data - 可以通過$query_data,其可以是多於一種類型的(在這種情況下,數組或一個目的是允許)
  • [ ... ] - 下面的部分是可選的
  • string $numeric_prefix - 任選地,通過一個字符串作爲前綴數字鍵
  • 使用
  • [ ... ] - 下一個參數是可選的太
  • string $arg_separator - 任選地,通過一個字符串作爲隔膜
  • [ ... ]使用 - 另一種可選的參數
  • int $enc_type = PHP_QUERY_RFC1738 - 任選地通過編碼類型,缺省值示出。

這意味着,在你的情況,你就需要調用:在PHP手冊所示

http_build_query($data, null, "&", PHP_QUERY_RFC3986); 
+0

工作就像我想要的,謝謝! – user3371961

3
$query = http_build_query($data, null, '&', PHP_QUERY_RFC3986); 

手冊中的符號使用[...]可選增強部,這不是實際語法的一部分。它還記錄了參數名稱,類型和默認值,您不需要也不能提供所有這些參數。您需要通過在其位置傳遞默認值(這裏是null'&')來跳過您不感興趣的兩個參數。而你真正感興趣的參數,你傳遞的字面常量PHP_QUERY_RFC3986

如果你想成爲一個非常好的公民,請注意,第三個arg_separator參數的默認值取自arg_separator.output ini設置;它實際上並不默認爲'&'。所以,這是更正確的:

http_build_query($data, null, ini_get('arg_separator.output'), PHP_QUERY_RFC3986) 
0

功能簽名不是PHP代碼樣本。相反,他們只是文檔,使得使用普通文檔化約定:

  • 方括號([])平均可選
  • 省略號(...)指
  • 類型前綴顯示數據類型

所以這只是表示:

  • $query_data可以是多種類型
  • $numeric_prefix$arg_separator必須是字符串(或將被轉換爲一個)
  • $enc_type必須是一個整數(或將被轉換爲一個)
  • 函數返回的串
  • 所有的參數都是可選的,除了第一個

使用此信息撰寫有效 PHP。