说,例如我有一个URI http://127.0.0.1/somecontroller/someaction#12345
,它带我进入someController控制器的someAction()
动作。从那里,我可以通过$this->getRequest()
检索Request对象。
我还能够从Request对象中检索有关URI的各种信息。
但是,我如何检索片段(即例如#之后的“12345”部分)? getRequestUri()
和getParams()
都没有打开片段部分。
谢谢!
答案 0 :(得分:26)
URL的片段部分永远不会通过GET请求(或任何类型的HTTP请求)发送到服务器,唯一可以获得它的方法是编写一个解析URL并发送的Javascript片段例如,片段通过Ajax返回服务器。
单靠PHP无法做到这一点。
答案 1 :(得分:3)
根据HTTP协议规范,忽略片段部分。但是,浏览器确实支持使用哈希重定向。
如果您自动生成哈希值,则可以将id
作为请求参数传递:
http://127.0.0.1/somecontroller/someaction/id/12345/#12345
然后:
$this->getRequest()->getParam('id')
但是这只会使用散列来处理这种情况,例如:当用户手动输入URL时。
答案 2 :(得分:1)
你不能使用:
explode("#",$_SERVER['REQUEST_URI'])
因为当你致电$_SERVER['REQUEST_URI']
时,你永远不会在#
之后得到这个词。例如,您的链接www.example.com/about#test
,当您致电$_SERVER['REQUEST_URI']
时,您只会获得www.example.com/about
。
答案 3 :(得分:0)
你不能使用php函数explode("#",$_SERVER['REQUEST_URI'])?
也许我误解了这个问题。