关于#在网址中的奇怪问题

时间:2009-12-08 08:08:53

标签: url get

http://localhost/test/editformquestions.php#?formid=1

http://localhost/test/editformquestions.php?formid=1

我未能在第一个中找回$_GET['formid'],为什么?

test/editformquestions.php的内容很简单:

<?php

echo $_GET['formid'];
?>

5 个答案:

答案 0 :(得分:6)

浏览器将使用散列#后面的字符,它们不会被发送回服务器。

答案 1 :(得分:3)

#是哈希字符,而不是GET变量。

您需要在任何哈希值之前放置?,否则将不会填充$ _GET数组。

答案 2 :(得分:2)

浏览器使用

#,并且永远不会将其发送到服务器。浏览器使用#之后的所有内容(无论它是什么)跳转到页面上的某个位置。

所以:

http://localhost/test/editformquestions.php#?formid=1

将拆分如下:

  • 服务器请求http://localhost/test/editformquestions.php
  • 浏览器然后在页面中搜索:

    <a name="?formid=1">named anchor tag</a>
    

你应该做的是:

http://localhost/test/editformquestions.php?formid=1&othervar=2#anchorinpage

或者,如果在查询字符串参数中需要#

http://localhost/test/editformquestions.php?formid=1&othervar=textwith%23init

答案 3 :(得分:0)

#是网址的片段标识符:http://en.wikipedia.org/wiki/Fragment_identifier

要将它用作数组变量的一部分,您需要对其进行url编码:

'#' becomes '%23' when url-encoded

在javascript中,您可以使用encodeURI()函数

完成网址编码

答案 4 :(得分:0)

HTTP URL可能包含以下部分:

  • 协议:http://
  • 域名:localhost
  • 路径:/test/editformquestions.php
  • 查询字符串:?formid=1 - 始终以?
  • 开头
  • 片段:#something - 始终以#开头 - 在#标记未发送到服务器之后的任何内容。

您在第一个示例(http://localhost/test/editformquestions.php#?formid=1)中的内容是包含此内容的片段:#?formid=1。片段中有?并不重要;只要它在#后面,就不会从浏览器发送。

所以,实际上,你只是向服务器发送了这个:http://localhost/test/editformquestions.php - 正如你所看到的那样,在该请求中没有formid。