如何从php中的URL获取片段(散列'#'后的值)?
从http://domain.com/site/gallery/1#photo45我想说photo45
sfu*_*ger 110
如果你想在用户的浏览器中显示哈希标记或锚之后的值:使用"标准"HTTP是不可能的,因为这个值永远不会发送到服务器(因此它不可用于$_SERVER["REQUEST_URI"]或类似预定义变量).您需要在客户端使用某种JavaScript魔法,例如将此值包含为POST参数.
如果它只是从任何来源解析一个已知的URL,那么mck89的答案就完全没问了.
mck*_*k89 40
那部分被称为"片段",你可以这样得到它:
$url=parse_url("http://domain.com/site/gallery/1#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
Run Code Online (Sandbox Code Playgroud)
jav*_*web 31
if( strpos( $url, "#" ) === false ) echo "NO HASH !";
else echo "HASH IS: #".explode( "#", $url )[1]; // arrays are indexed from 0
Run Code Online (Sandbox Code Playgroud)
或者在"旧"PHP中,您必须预先存储爆炸以访问数组:
$exploded_url = explode( "#", $url ); $exploded_url[1];
Run Code Online (Sandbox Code Playgroud)
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
});
Run Code Online (Sandbox Code Playgroud)
根据您form的method属性,您可以通过以下方式在PHP中获取此哈希:
$_GET['fragment']或$_POST['fragment']
可能的返回: 1.""[空字符串](无哈希)2.整个哈希包含#[哈希]符号(因为我们已经使用了window.location.hashJavaScript,它只是这样工作:))
...(不是在考虑常规HTTP请求时)......
...希望这有帮助:)
小智 9
我一直在寻找一个解决方法 - 我发现的唯一的事情就是使用URL重写来读取"锚点".我在这里的apache文档http://httpd.apache.org/docs/2.2/rewrite/advanced.html中找到了以下内容......
默认情况下,重定向到HTML锚点不起作用,因为mod_rewrite转义#字符,将其转换为%23.反过来,这会打破重定向.
解决方案:使用RewriteRule上的[NE]标志.NE代表No Escape.
讨论:这种技术当然也适用于mod_rewrite默认情况下URL编码的其他特殊字符.
它可能有其他警告,但不是......但我认为至少可以使用服务器上的#做一些事情.
您无法在井号后面得到文字。它不会在请求中发送到服务器。
| 归档时间: |
|
| 查看次数: |
168640 次 |
| 最近记录: |