Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 服务器是否应该接受&;amp;而不是&;在URL get请求中?_Php_Http_Server_Server Configuration - Fatal编程技术网

Php 服务器是否应该接受&;amp;而不是&;在URL get请求中?

Php 服务器是否应该接受&;amp;而不是&;在URL get请求中?,php,http,server,server-configuration,Php,Http,Server,Server Configuration,简介 我会给你举个例子,这样我的问题可能更容易理解。我不需要编程方面的“帮助”,只需要关于这个主题的信息 示例 我试着找一个特定的职位,但偶然发现了一个问题。我构建url以请求如下数据: $params['q'] = $latitude .','. $longitude; // 48.14,11.58 $params['format'] = $format; //json $params['num_of_days'] = $numOfDays; //1 $pa

简介
我会给你举个例子,这样我的问题可能更容易理解。我不需要编程方面的“帮助”,只需要关于这个主题的信息

示例
我试着找一个特定的职位,但偶然发现了一个问题。我构建url以请求如下数据:

$params['q']            = $latitude .','. $longitude; // 48.14,11.58
$params['format']       = $format; //json
$params['num_of_days']  = $numOfDays; //1
$params['key']          = self::APIKEY;

$url = 'http://api.worldweatheronline.com/free/v1/weather.ashx'
$url .= '?'. http_build_query($params);
foo=1&bar=2
最终的URL如下所示

但是,当使用cURL请求此URL的数据时,我收到了一个错误,即没有提供api密钥。正如我发现的,问题在于
的使用&URL中的符号。当我使用
http\u build\u query
方法时,如下所示:

$url.='?'。http_build_查询($params,null,&')

URL如下所示:

问题
现在我想问的是,这是否是服务器的预期行为。我从其他几个API(Facebook、Foursquare等)知道他们接受
&而不是URL中的
&
,并按预期工作


有标准吗?服务器是否能够接受
&
还是接受它是“错误的”,应该只接受
&
?谢谢

HTML实体,如
&不是URI规范的一部分。就相关而言,
&
是一个子定界字符,因此,如果服务器接收到如下查询字符串:

$params['q']            = $latitude .','. $longitude; // 48.14,11.58
$params['format']       = $format; //json
$params['num_of_days']  = $numOfDays; //1
$params['key']          = self::APIKEY;

$url = 'http://api.worldweatheronline.com/free/v1/weather.ashx'
$url .= '?'. http_build_query($params);
foo=1&bar=2
并将其解析为以下键值对:

'foo' => '1',
'amp;bar' => '2'
它的行为是正确的

为了让事情变得更有趣,
也是保留的子分隔符,但:

如果在URI组件中找到保留字符且没有定界 角色是该角色的已知角色,则必须将其解释为 表示对应于该字符编码的数据八位字节 在US-ASCII中


HTML实体,如
&不是URI规范的一部分。就相关而言,
&
是一个子定界字符,因此,如果服务器接收到如下查询字符串:

$params['q']            = $latitude .','. $longitude; // 48.14,11.58
$params['format']       = $format; //json
$params['num_of_days']  = $numOfDays; //1
$params['key']          = self::APIKEY;

$url = 'http://api.worldweatheronline.com/free/v1/weather.ashx'
$url .= '?'. http_build_query($params);
foo=1&bar=2
并将其解析为以下键值对:

'foo' => '1',
'amp;bar' => '2'
它的行为是正确的

为了让事情变得更有趣,
也是保留的子分隔符,但:

如果在URI组件中找到保留字符且没有定界 角色是该角色的已知角色,则必须将其解释为 表示对应于该字符编码的数据八位字节 在US-ASCII中


不知何故,我无法编辑我的帖子。第一个URL应该如下所示:
http://api.worldweatheronline.com/free/v1/weather.ashx?q=48.13743%2C11.57549&格式=json&;天数=1&;key=APIKEY
。参数分隔符应为
&不是
&
。希望能澄清一些事情!这个问题无法明确回答,因为你在征求意见。不,在我看来,服务器不能理解任何URL格式,这些格式是由于调用链早期的解析错误导致的是否应被服务器接受。但如果我理解正确,您会说,您认为服务器不应该接受
&&
?-我投票赞成分享你的观点,比如我不能编辑我的帖子。第一个URL应该如下所示:
http://api.worldweatheronline.com/free/v1/weather.ashx?q=48.13743%2C11.57549&格式=json&;天数=1&;key=APIKEY
。参数分隔符应为
&不是
&
。希望能澄清一些事情!这个问题无法明确回答,因为你在征求意见。不,在我看来,服务器不能理解任何URL格式,这些格式是由于调用链早期的解析错误导致的是否应被服务器接受。但如果我理解正确,您会说,您认为服务器不应该接受
&&
?-投票赞成分享你的观点,赞成答案。这是我第一次偶然发现这个问题,而且我经常使用
http\u build\u query
,那么Facebook和其他API为什么没有
的问题呢而不是
&
?回答得好,投了赞成票@必须知道的是,他们可能已经让他们的服务器去实体化了
&s,但这不是每个服务器都需要或期望的。谢谢您的回答。http\u build\u查询使用
有什么原因吗&而不是
&
?我真的应该始终传递两个附加参数以确保URL没有编码/解码问题吗?@Musterknabe实际上,
&
http\u build\u query
的默认分隔符,如文档()所述,并通过快速测试()确认。您的PHP版本/构建使用
&
似乎是一个bug,正如一些人在文档页面的评论部分提到的那样。我想你总是手动提供
&
是最安全的。声明此错误的人都有PHP5.3,但我使用的是5.5以上的sth(可以明天查看)。如果我的php版本创建了
,我是否应该将其报告为bug作为默认参数分隔符?谢谢您的回答。这是我第一次偶然发现这个问题,而且我经常使用
http\u build\u query
,那么Facebook和其他API为什么没有
的问题呢而不是
&
?回答得好,投了赞成票@必须知道的是,他们可能已经让他们的服务器去实体化了
&s,但这不是每个服务器都需要或期望的。谢谢您的回答。http\u build\u查询使用
有什么原因吗&而不是
&