[英]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.