我正在使用服务,他们的服务器每小时都会联系我这样的服务:
/check.php?id=1&name=anonyme&country=us
所以我拿起这样的信息:
$id = @$_GET['id'];
$name = @$_GET['name'];
$country = @$_GET['country'];
太棒了,一切都很好。但当名字上有空格时,我们可以说:
/check.php?id=1&name=MR Anonymous&country=us
然后在php中我只能获取名称为“MR”的ID和第一部分。我不能得到其他价值(国家等等)因为那个空间而保持空虚。
我已经联系了发送此信息的公司,我告诉他们也许这是他们的问题,他们说不,我只需要URLENCODE我的网址..
我仍然认为这不是我的问题,因为当我看到Apache日志时,我看到他们的网址上有空格,他们应该修复这个空间。 (因为当我在任何浏览器中使用相同的URL时,该空间变为%20,而公司的情况则不然)
这是我的问题吗?还是他们的问题?如果它是我的,如何解决它?
答案 0 :(得分:1)
URI中不允许使用原始空格(即使某些客户端和某些服务器在被要求处理它们时可能会错误恢复)。
您需要对数据进行urlencode。
答案 1 :(得分:1)
我认为他们(其他服务器)在发送到您的服务器之前需要urlencode()
数据,然后您将urldecode()
它。
答案 2 :(得分:1)
如果他们向您的服务器发出这些请求(并且您无法控制这些请求),那么绝对不是您的错。
禁止使用URI中的空格。 Apache 确实允许它们,但是PHP会让人感到困惑,并将空间作为协议。
您可以通过将$_SERVER['SERVER_PROTOCOL']
附加到$_SERVER['QUERY_STRING']
来解决此问题,删除 last 空间后的所有内容,然后解析此网址(请参阅parse_url
和{{ 3}})。然而,最好的是他们会修复他们的请求。