究竟如何使用http_build_query? (例)

时间:2014-05-09 10:26:40

标签: php function

我对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

3 个答案:

答案 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。