如何从PHP中的URL获得片段(哈希“#”后的值)?获取片段(哈希值“#”后)从PHP中的URL
说从http://domain.com/site/gallery/1#photo45
我想photo45
如何从PHP中的URL获得片段(哈希“#”后的值)?获取片段(哈希值“#”后)从PHP中的URL
说从http://domain.com/site/gallery/1#photo45
我想photo45
如果你想获得哈希标记或锚后的值显示在用户的浏览器:这ISN” t“标准”HTTP的可能性,因为此值永远不会发送到服务器(因此它不会在$_SERVER["REQUEST_URI"]
或类似的预定义变量中可用)。您需要在客户端使用某种JavaScript魔术,例如将此值作为POST参数包含在内。
如果只有来自任何来源解析一个已知的URL,该answer by mck89是完全正常的,但。
'alert(window.location.hash);' – sfussenegger 2010-02-23 11:15:38
只是一个说明:'window.location.hash'可以让你得到整个片段,包括'#'[hash]符号......当然,它在JavaScript中:) – 2014-12-09 01:07:30
BTW:JavaScript magic:D:D:D:D:D ... var forms = document.getElementsByTagName('form'); for(var i = 0; i
你不能得到哈希标记后的文本。它不会在请求中发送到服务器。
这部分被称为“片段”,你可以用这种方式得到它:
$url=parse_url("http://domain.com/site/gallery/1#photo45 ");
echo $url["fragment"]; //This variable contains the fragment
这就是非常好,但如果你要添加'''$ fragment = isset($ url ['fragment']),那么它将没有任何错误? '#'。 $ url ['fragment']:''; '''但仍然竖起大拇指! – 2016-12-19 15:45:57
我发现这一招,如果u要坚持用PHP值.. 分裂锚(#)值,并与JavaScript得到它,然后保存为饼干,之后用php获取cookie值〜
http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/
我一直在寻找这方面的解决方法 - 我发现的唯一的事情就是使用URL重写来读取“锚点”。我在Apache文档发现这里http://httpd.apache.org/docs/2.2/rewrite/advanced.html以下...
默认情况下,重定向到一个HTML锚不起作用,因为mod_rewrite的转义字符#,把它变成23%。 这反过来打破了重定向。
解决方案:使用[NE]标志的重写规则。 NE代表No Escape。
讨论:这项技术当然也有其他特殊 字符mod_rewrite的,默认情况下,URL编码工作。
它可能有其他的注意事项,什么不可以...但我认为,至少做一些与服务器上的#是可能的。
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];
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
});
根据您的form
的method
属性您得到这个哈希在PHP中: $_GET['fragment']
或$_POST['fragment']
可能的回报: 1. ""
[空字符串](无散列)2.整个散列包括#
[散列]符号(因为我们已经在JavaScript中使用window.location.hash
,它只是以这种方式工作:))
...(不同时考虑常规的HTTP请求)...
...希望这有助于:)
你可以做一个字符串在客户端,然后在服务器端进行更换。不是一个特别强大的解决方案,但如果你不想像我这样的快速解决方案,我认为就足够了。
客户:
服务器:
$user_message = $_GET['userMessage'];
$user_message = str_replace("hashtag", "#", $user_message);
获取数据的查询字符串hashmark之后是简单的。以下是当客户访问书中术语词汇表时使用的示例。它需要名称锚点(#tesla),并将客户端传送到该术语,并用蓝色突出显示该术语及其描述,以便于查看。
A.设置你的琴弦用DIV ID,所以这个名字锚飞到哪里,它应该和JavaScript可以改变文本颜色
<div id="tesla">Tesla</div>
<div id="tesla1">An energy company</div>
B.使用JavaScript来完成繁重的工作,在服务器端,插在你的PHP页面,或任何..
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
C.我会自动启动Java功能加载页面时。
<script>
$(document).ready(function() {
D.获得从服务器
var myhash1 = $(location).attr('hash'); //myhash1 == #tesla
E.接收到的URL的锚点(#tesla)修剪井号关闭它
myhash1 = myhash1.substr(1) //myhash1 == tesla
F.我需要强调的术语和说明,所以我创建一个新的变种
var myhash2 = '1';
myhash2 = myhash1.concat(myhash2); //myhash2 == tesla1
G.现在我可以操纵的术语和描述
文字颜色H. This works。客户端点击客户端的链接(xyz.com#tesla),并直接进入该术语。该术语和说明用蓝色突出显示,以便快速阅读..所有其他条目留在黑色..
这个答案仅处理片段的客户端处理,而问题是关于服务器端(使用PHP)。 – 2017-04-12 10:00:06
与客户端安装正确,然后服务器端很容易与PHP。 – 2017-04-14 17:36:01
@ile http://en.wikipedia.org/wiki/Hash_symbol – 2010-02-23 11:20:07
重复或至少在相同行作为http://stackoverflow.com/questions/1957030/retrieve-the-hash-in-the-url-with-php,http://stackoverflow.com/questions/1162008/php-hash-fragment-portion-网址和http://stackoverflow.com/questions/2181290/php-zend-framework-how-to-get-request-uri-fragment-from-request-object – Gordon 2010-02-23 12:09:58
可能的重复[如何获得值后“somepage.php#name”中的散列?](http://stackoverflow.com/questions/1917762/how-to-get-the-value-after-the-hash-in-somepage-phpname) – PhoneixS 2015-07-08 09:39:48