在php代码错误中从url获取#var

时间:2012-05-25 07:30:29

标签: php javascript

我希望从网址获取#var值,例如我的网址为mydomain.com/index.php#1,所以我想从网址获得(#)值1经过一些研究后我得到了这篇文章http://www.stoimen.com/blog/2009/04/15/read-the-anchor-part-of-the-url-with-php/

我使用此代码获取get(#)值,这在JavaScript中工作正常,但这在php我的代码中无效:

<script language="javascript">
var query = location.href.split('#');
document.cookies = 'anchor=' + query[1];
alert(query[1]);
</script>
<?php
echo $_COOKIE['anchor'];
?>

此代码在alert但不是JavaScript值中给出echo值。任何解决方案?

5 个答案:

答案 0 :(得分:1)

下一个页面请求之前,PHP将无法看到您正在设置的Cookie。您链接到的文章明确说明

  

当然,是的。这不能正常工作。事实上它正在发挥作用   从第二次加载正确,但在页面的初始加载   $ _COOKIE数组里面没有任何锚键。那是因为   这部分代码在浏览器设置cookie之前执行   在客户端。

该文章中提到了“解决方法”,但坦率地说:这种事情是垃圾,如果您希望PHP读取它,您应该只将这些信息(仅)放在查询片段中。

答案 1 :(得分:1)

根据您发送的文章,您必须执行重定向,例如:

<?php if (!$_COOKIE['anchor']){ ?>
<script language="javascript">
  var query = location.href.split('#');
  document.cookie = 'anchor=' + query[1];
  window.location.reload();
</script>
<?php } ?>

<?php
echo $_COOKIE['anchor'];
?>

答案 2 :(得分:1)

此外,您似乎在JS中设置了错误的属性(它是.cookie,而不是.cookies):

document.cookie = 'anchor' + query[1];

答案 3 :(得分:0)

您正在设置一个cookie,在下次重新加载之前不会传递给php。我错了吗?

客户动态是链条的终点。

答案 4 :(得分:0)

使用此方法可以防止错误:

<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