最近,当我看到google结果页面时,查询和其他参数传递了#(hash)而不是通常的“?”
另外,在facebook中我看到了同样的事情。这非常有趣,经过google的简单搜索后,我发现结果与perl和Ruby相关,但PHP没有结果。
是否可以在PHP中使用#而不是“?”传递参数或者这只能用perl / Ruby实现。这将非常有用,搜索引擎也不会解析URL中的参数。
任何想法都会对我有所帮助。
答案 0 :(得分:8)
传统上,#
告诉浏览器自动滚动到页面中的特定点,这是(并且仍然)经常用于实现页面一部分的链接(例如目录)到另一个(例如标题部分)。
但是,它还会导致包含#
的网址记录在历史记录中,即使它与之前的网址相同,但#
除外。 (换句话说,用户仍然在同一页面上。)这意味着后退按钮可用于返回您之前所处的状态,即使该状态更改与页面不对应 - 负荷。
因此,现代AJAX应用程序经常使用它来表示用户可能想要“返回”的某些事情。
答案 1 :(得分:1)
不,这是不可能的。
您看到的只是一个装饰,以反映地址栏中的AJAX调用。
无论您选择何种语言 - 所有语言都位于服务器端,并使用HTTP协议与浏览器进行通信。 HTTP请求中不允许使用锚点。这完全是客户端的事情
答案 2 :(得分:0)
您在搜索结果中遇到了混乱,因为术语哈希是overloaded,参数传递的概念也是如此。
您看到了在散列中传递值的概念的引用,因为associative array在某些语言中被称为散列(这是散列表的缩写)。
#
字符也容易引起混淆。它被称为“哈希”,“磅”,“数字”和“octothorpe”。自从我在美国长大以来,我称之为“英镑符号”,这可能让更多英国英语的用户感到烦恼,同样充满了混淆的可能性(考虑“英镑”)。
在Perl中的散列中传递函数参数是获取例程的命名参数的好方法。 PHP只有位置参数,但使用数组可以很好地工作。
许多Web库对表单值使用散列/关联数组类型结构。键通常是字段ID,值是字段值。
在URI中,#
表示片段说明符的开头。它标识URI指向的页面的一部分。它通常不用于将请求信息从客户端传递回服务器。
答案 3 :(得分:-1)
可能有一些服务器重写等等。 使用apache服务器的示例,您可以处理一些类似于
的urihttp://www.mysite.com#something
并将其重写为
http://www.mysite.com/perl/script.pl?data=something
然后将其作为对script.pl
的简单GET查询进行处理这是所有服务器端处理,对客户端不可见