从PHP中的URL获取片段(哈希后的值“#”)

我怎么能从PHP中的URL获得片段(哈希后的值#)?

http://domain.com/site/gallery/1#photo45说我想要photo45

如果你想在用户浏览器中显示哈希标记或锚点之后的值:这是不可能的“标准”HTTP,因为这个值永远不会发送到服务器(因此它不会在$_SERVER["REQUEST_URI"]或类似的预定义变量)。 你需要在客户端使用某种JavaScript魔术,例如把这个值作为POST参数。

如果仅仅是从任何来源解析一个已知的URL,那么mck89的答案是完全正确的。

这部分被称为“片段”,你可以这样得到它:

 $url=parse_url("http://domain.com/site/gallery/1#photo45 "); echo $url["fragment"]; //This variable contains the fragment 

一)PHP已经有#hash的网址? 简单! 解析它!

 if( strpos( $url, "#" ) === false ) echo "NO HASH !"; else echo "HASH IS: #".explode( "#", $url )[1]; // arrays are indexed from 0 

或者在“旧”PHP中,您必须预先存储爆炸以访问数组:

 $exploded_url = explode( "#", $url ); $exploded_url[1]; 

B)你想通过发送一个表单到PHP获得#hash?
=>使用一些JavaScript的魔术! (预处理表单)

 var forms = document.getElementsByTagName('form'); //get all forms on the site for(var i=0; i<forms.length;i++) forms[i].addEventListener('submit', //to each form... function(){ //add a submit pre-processing function that will: var hidden = document.createElement("input"); //create an extra input element hidden.setAttribute('type','hidden'); //set it to hidden so it doesn't break view hidden.setAttribute('name','fragment'); //set a name to get by it in PHP hidden.setAttribute('value',window.location.hash); //set a value of #HASH this.appendChild(hidden); //append it to the current form }); 

根据您的formmethod属性,您可以通过以下方式获取PHP中的哈希值:
$_GET['fragment']$_POST['fragment']

可能的返回: 1. "" [空字符串](无散列)2.整个散列包括# [散列]符号(因为我们已经在JavaScript中使用window.location.hash ,只是这样工作:))

C)你想要从请求的URL中获得PHP的#hash?

你不能!

…(而不是在考虑普通的HTTP请求)…

…希望这有助于:)

我一直在寻找解决这个问题的办法 – 我唯一找到的就是使用URL重写来读取“锚点”。 我发现在这里的Apache文档http://httpd.apache.org/docs/2.2/rewrite/advanced.html以下;…

默认情况下,重定向到HTML锚点不起作用,因为mod_rewrite会转义#字符,将其转换为%23。 这反过来打破了重定向。

解决方案:使用RewriteRule上的[NE]标志。 NE表示不逃脱。

讨论:这个技术当然也可以和其他特殊字符mod_rewrite一起使用,默认情况下是URL编码。

它可能有其他的警告,什么不…但我认为,至少做一些与服务器上的#是可能的。

哈希标记之后您无法获取文本。 它不会在请求中发送到服务器。

我发现这个诀窍,如果你坚持要用PHP的价值..拆分锚(#)的价值,并获得它的JavaScript,然后存储为cookie,之后,得到的cookie值与php〜

http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/

你可以在客户端和服务器端进行字符串替换。 不是一个特别强大的解决方案,但是如果你不能像我这样的快速解决方案,我认为就足够了。

客户:

 var tempString = stringVal.replace('#', 'hashtag'); 

服务器:

 $user_message = $_GET['userMessage']; $user_message = str_replace("hashtag", "#", $user_message); 

在查询字符串中获取哈希标记后的数据很简单。 以下是客户访问书籍词汇表时使用的示例。 它需要名称anchor(#tesla),并将客户端交付给该术语,并用蓝色突出显示该术语及其描述,以便于查看。

A.用一个div id设置你的字符串,所以这个名字的锚点就会到达它应该和javascript可以改变文本颜色的地方

 <div id="tesla">Tesla</div> <div id="tesla1">An energy company</div> 

B.使用Javascript来完成繁重的工作,在服务器端,插入到您的PHP页面或任何地方。

 <script src="jquery-1.9.1.min.js"></script> 

C.我正在加载页面时自动启动java函数。

 <script> $( document ).ready(function() { 

D.从服务器收到的URL中获取锚点(#tesla)

 var myhash1 = $(location).attr('hash'); //myhash1 == #tesla 

E.修剪散列符号

 myhash1 = myhash1.substr(1) //myhash1 == tesla 

F.我需要突出的术语和描述,所以我创建一个新的变种

 var myhash2 = '1'; myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1 

G.现在我可以操作文字颜色的术语和描述

 var elem = document.getElementById(myhash1); elem.style.color = 'blue'; elem = document.getElementById(myhash2); elem.style.color = 'blue'; }); </script> 

H.这工作。 客户端点击客户端的链接(xyz.com#tesla)并且直接进入该术语。 该术语和说明用蓝色突出显示,以便快速阅读..所有其他条目留在黑色..