假设 URL 为:
www.example.com/?val=1#part2
PHP 可以使用 GET 数组读取请求变量
val1
。
哈希值
part2
也可读吗?或者这仅取决于浏览器和 JavaScript?
主要问题是浏览器甚至不会发送带有片段部分的请求。片段部分就在浏览器中解析。所以它可以通过 JavaScript 访问。
无论如何,您可以使用 parse_url() 将 URL 解析为位,包括片段部分,但这显然不是您的情况。
简单测试,访问 http://localhost:8000/hello?foo=bar#this-is-not-sent-to-server
python -c "import SimpleHTTPServer;SimpleHTTPServer.test()"
Serving HTTP on 0.0.0.0 port 8000 ...
localhost - - [02/Jun/2009 12:48:47] code 404, message File not found
localhost - - [02/Jun/2009 12:48:47] "GET /hello?foo=bar HTTP/1.1" 404 -
服务器接收不带#appendage的请求 - 哈希标签之后的任何内容都只是客户端上的锚点查找。
您可以通过 javascript 找到 URL 中使用的锚点名称,例如:
<script>alert(window.location.hash);</script>
如果您已经拥有所需的 URL 字符串(包括片段),PHP 中的 parse_url() 函数就可以工作 (http://codepad.org/BDqjtXix):
<?
echo parse_url("http://foo?bar#fizzbuzz",PHP_URL_FRAGMENT);
?>
Output: fizzbuzz
但我不认为 PHP 会收到片段信息,因为它是仅限客户端的。
它可以从 Javascript 中检索 - 如
window.location.hash
。从那里,您可以使用 Ajax 将其发送到服务器,或者对其进行编码并将其放入 URL,然后将其传递到服务器端。
哈希值永远不会发送到服务器,所以不会。
答案是否定的。
哈希的主要目的是滚动到您定义书签的页面的特定部分。例如页面加载时滚动到此部分。
浏览将滚动,使得该行成为页面中第一个可见的内容,具体取决于该行下面有多少内容。
是的,javascript 可以访问它,然后一个简单的 ajax 调用就会发挥作用
关于:
动态抓取#hash
<script>
var urlhash = window.location.hash, //get the hash from url
txthash = urlhash.replace("#", ""); //remove the #
//alert(txthash);
</script>
<?php
$hash = "<script>document.writeln(txthash);</script>";
echo $hash;
?>
为了使其更流畅:
仅使用 Javascript 和 PHP 的完整示例
<script>
var urlhash = window.location.hash, //get the hash from url
txthash = urlhash.replace("#", ""); //remove the #
function changehash(a,b){
window.location.hash = b; //add hash to url
//alert(b); //alert to test
location.reload(); //reload page to show the current hash
}
</script>
<?php $hash = "<script>document.writeln(txthash);</script>";?>
<a onclick="changehash(this,'#hash1')" style="text-decoration: underline;cursor: pointer;" >Change to #hash1</a><br/>
<a onclick="changehash(this,'#hash2')" style="text-decoration: underline;cursor: pointer;">Change to #hash2</a><br/>
<?php echo "This is the current hash: " . $hash; ?>
我认为哈希值仅在客户端使用,所以你无法通过 php 获取它。
你可以使用 javascript 将其重定向到 php。
#
之后的
URI部分称为“片段”,根据定义仅在客户端可用/处理(请参阅https://en.wikipedia.org/wiki/Fragment_identifier)。
在客户端,可以使用带有
window.location.hash
的 javaScript 来访问它。
<?php
$url=parse_url("http://domain.com/site/gallery/1?user=12#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
?>
这应该可行
是的,你可以:
使用此方法可以防止错误:
<script>
query=location.hash;
document.cookie= 'anchor'+query;
</script>
当然在 PHP 中,爆炸那只小狗并获取其中一个值
$split = explode('/', $_COOKIE['anchor']);
print_r($split[1]); //to test it, use print_r. this line will print the value after the anchortag
我们也可以用另一种方法来做到这一点,比如首先从js获取哈希值,然后使用该参数调用ajax,就可以做任何我们想做的事情
这里是更完整的代码,您可以从以下开始:
<script>
sendTokenParameter();
function sendTokenParameter() {
if (!window.location.hash) {
return;
}
const id_token = window.location.hash.split('&').filter(function(el) { if(el.match('id_token') !== null) return true; })[0].split('=')[1];
if (!id_token) {
console.error('No token returned');
return;
}
window.location.href = `${window.location.pathname}?id_token=${id_token}`
}
</script>
<?php
process_login();
function process_login() {
$id_token = $_GET['id_token'];
if (!$id_token) {
// Let the javascript code to send the token
return;
}
// Do stuff with the token
}
?>
另一个解决方案是在php页面中添加隐藏的输入字段:
<input type="hidden" id="myHiddenLocationHash" name="myHiddenLocationHash" value="">
使用 javascript/jQuery,您可以在页面加载或响应事件时设置此字段的值:
$('#myHiddenLocationHash').val(document.location.hash.replace('#',''));
在服务器端的 php 中,您可以使用 $_POST 集合读取此值:
$server_location_hash = $_POST['myHiddenLocationHash'];