2010-07-20 72 views

回答

3

你必须来urlencode您的网址,以逃避特殊/禁止字符。

http://php.net/manual/en/function.urlencode.php

+0

详细说明,#是网址中的一个特殊字符(指向页面内的锚点)。要将其用作查询字符串的一部分,需要对其进行编码,这将在URL中看起来像%23,但#在$ _GET中。 – grossvogel 2010-07-20 15:26:46

+0

首先,我相信应该使用urlencode的rawurlencode instread,因为urlencode的空间编码方式(如'+')几乎不推荐使用,并且仅用于遗留目的。其次,他不会收到服务器端的URL,他会吗? '#'符号表示一个片段,并且它后面(包括它)返回给服务器。据我所知,这个答案不会奏效。 – Stephen 2010-07-20 15:28:07

+1

@Stephen:编码空格as +是'application/x-www-form-urlencoded'内容类型的一部分,当没有文件输入时,HTML用于通过查询字符串和POST函数发送表单数据当下。这种媒体类型仍然是HTML5中表单的默认格式;因此,它不**弃用。 – Powerlord 2010-07-20 15:37:13

1

的#后的部分称为片段标识符,并且它不被发送到服务器。如果你想这样发送,你需要使用encodeURIComponent

+0

我相信它是正式称为“片段标识符”。 “#”字符本身被称为哈希(至少在英国)。 – MrWhite 2010-07-20 15:31:46

+0

谢谢,我编辑了我的答案。我把它称为散列,因为你可以通过'window.location.hash'访问它。 – Maerlyn 2010-07-20 15:42:45

0

您需要确保URL已正确转义 - 请参阅URL Escape Codes以供参考。例如,#应该转义为%23

有很多方法可以做到这一点,包括使用JavaScript函数encodeURIComponent(用于动态生成的链接)。

0

嗯,我正在处理一个AngularJS应用程序,它检查用户是否登录了每个请求。

在某些时候,应用程序会将用户重定向到使用参数“next”传递用户当前状态的/ login控制器。

所以我已经得到了这个网址“http://test.dev/login/?next=/#/foo/bar”,我想获得$ _GET ['next']的值,但是等等...为什么heck只返回'/'?

那么,事实证明,我需要使用JavaScript方法encodeURIComponent()来生成URL。

然后这个:http://test.dev/login/?next=/#/foo/bar,成为这个:http://test.dev%2Flogin%2F%3Fnext%3D%2F%23%2Ffoo%2Fbar和PHP能够处理这个很好。