2011-09-07 60 views
0

我使用的是服务,其中约每一个小时他们的服务器这样的接触雷:URL编码URL中的问题

/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我只能拾取ID以及在其上“MR”名称的第一部分。我无法得到其他的价值(国家等),因为这个空间,他们一直空着。

我所接触发送该信息的公司,我告诉他们,也许这是他们的问题,他们说没有,我只是来urlencode我的网址..

我仍然认为这是他们的问题不是我的,因为当我看到Apache日志,我在他们的URL上看到一个空格,他们应该修复这个空间。 (因为当我在任何浏览器中使用相同的URL时,该空间变为%20,这与公司不一样)

这是我的问题吗?或者他们的问题?如果它是我的如何解决它?

+0

您应该询问提出请求的公司为什么需要URLENCODE *他们的* URL。 – robertc

回答

1

如果他们向你的服务器发出这些请求(你无法控制这些请求),那么这绝对不是你的错。

禁止在URI中使用空格。 Apache 确实允许它们使用,但PHP会感到困惑,并将空间作为协议。

您可以通过附加$_SERVER['SERVER_PROTOCOL']容纳这个问题$_SERVER['QUERY_STRING'],则最后空间之后,除去一切,然后解析这个URL(见parse_urlparse_str)。然而,最好的是他们正在修复他们的请求。

1

URI中不允许使用原始空格(即使某些客户端和某些服务器在被要求处理时可能会错误恢复)。

您确实需要urlencode数据。

+0

如何编码数据? – Reacen

+0

你去PHP手册和搜索urlencode,它会告诉你[urlencode()](http://uk.php.net/urlencode)函数。 – Quentin

+0

在哪里编码?我的变量是空的...这是行不通的 – Reacen

1

我想他们(另一台服务器)需要将urlencode()的数据发送到你的服务器之前,然后你将urldecode()它。