繁体   English   中英

究竟如何使用http_build_query? (例)

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM