[英]how exactly to use http_build_query? (example)
我對php 5中的http_build_query函數有疑問,所以這是問題所在:我有一些數據,例如:
$data = array(
'cat1'=>'billy',
'cat2'=>'james deen',
'cat3'=>'van helsing'
);
我想從他們生成url字符串,我正在使用http_build_query,這正是我所需要的,但是有一個問題,空格字符用+符號代替,但是我需要'%20'符號,所以我做了一些研究, PHP手冊告訴我,我可以像這樣設置enc_type參數:
string http_build_query ( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )
但是我不知道如何使用它,我這樣嘗試過:
$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
這里的問題是您在文檔中誤讀了函數簽名。 讓我為您翻譯。
string
函數返回一個字符串 http_build_query
函數名稱 mixed $query_data
您可以傳遞$query_data
,它可以是多種類型(在這種情況下,允許使用數組或對象) [ ... ]
-以下部分是可選的 string $numeric_prefix
(可選)傳遞一個字符串,用作數字鍵的前綴 [ ... ]
-下一個參數也是可選的 string $arg_separator
(可選)傳遞字符串以用作分隔符 [ ... ]
-另一個可選參數 int $enc_type = PHP_QUERY_RFC1738
(可選)傳遞編碼類型,默認為顯示的值。 這意味着在您的情況下,您需要致電:
http_build_query($data, null, "&", PHP_QUERY_RFC3986);
$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)
PHP手冊中顯示的功能簽名不是PHP代碼示例 。 相反,它們只是利用通用文檔約定的文檔:
[]
)表示可選 ...
)意味着更多 因此,這僅意味着:
$query_data
可以有幾種類型 $numeric_prefix
和$arg_separator
必須為字符串(否則將強制轉換為一個) $enc_type
必須為int(或將其$enc_type
為一個) 使用此信息來編寫有效的 PHP。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.