INTRO
我会举个例子,所以我的问题可能更容易理解。我在编程问题上不需要“帮助”,只需要关于这个主题的信息!
示例
我为一个特定的位置尝试了API for getting weather information并偶然发现了一个问题。我建立了我的网址来请求这样的数据:
$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);
最终的网址看起来像这样
但是,当使用cURL请求此URL的数据时,我收到了错误,即没有提供api-key。正如我发现的那样,问题是在URL中使用了&
个符号。当我使用http_build_query
这样的方法时:
$url .= '?'. http_build_query($params, null, '&');
问题
现在我要问的是,这是否是来自服务器的预期行为。我从其他几个API(Facebook,Foursquare等)了解到,他们在网址中接受&
而不是&
,并按预期工作。
有标准吗?服务器是否应该接受&
或接受它是“错误”,并且只应接受&
?谢谢!
答案 0 :(得分:5)
像&
这样的HTML实体不是URI规范的一部分。就RFC 3986而言,&
是一个子分隔符,因此如果服务器收到这样的查询字符串:
foo=1&bar=2
并将其解析为以下键值对:
'foo' => '1',
'amp;bar' => '2'
表现正常。
为了使事情变得更有趣,;
也是一个保留的子分隔符,但是:
如果在URI组件中找到保留字符且没有分隔符 角色对于该角色是已知的,那么它必须被解释为 表示与该字符的编码对应的数据八位字节 在US-ASCII。