我对php 5中的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 ]]] )
但我不知道如何使用它 我试过这样:
$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 :(得分:6)
这里的问题是你误读了文档中的函数签名。让我为你翻译一下。
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);
答案 1 :(得分: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)
答案 2 :(得分:0)
PHP手册中显示的功能签名是而不是PHP代码示例。相反,它们只是使用通用文档约定的文档:
[]
)表示可选 ...
)表示更多 所以这只是意味着:
$query_data
可以是多种类型$numeric_prefix
和$arg_separator
必须是字符串(或将转换为一个字符串)$enc_type
必须是int(或将被转换为一个)使用此信息撰写有效的 PHP。