PHP& URL的哈希/片段部分

时间:2009-07-21 22:06:06

标签: php url mod-rewrite hash fragment-identifier

我试图找到一种方法来保存网址的哈希部分和PHP变量。这个想法有点怪异,但请耐心等待......

我想从以下URL中提取“location”片段并将其另存为PHP变量。

http://www.example.com/#location

但是,此link的讨论表明,URL的片段只能通过JavaScript访问。

但是可以创建一个链接,其中片段在URL中重复,由PHP解析,然后通过mod重写删除?所以....

原始网址:

http://www.example.com/location/#location

由于URL中的简单“位置”,PHP获取位置变量

Apache然后将链接重写为:

http://www.example.com/#location

我很想知道是否有一种优雅的方法来解决这个问题。

5 个答案:

答案 0 :(得分:9)

您需要使用Javascript来阅读此内容。有几个不同的选项 - 在页面加载时,您可以使用XmlHTTPRequest(AJAX请求)告诉服务器其他URL参数是什么。您可以检查Alternatley是否有其他参数(也可以通过Javascript),如果您找到任何参数,请回发到不同的URL,这些参数将这些参数编码到URL本身。

答案 1 :(得分:5)

根据Mod_Rewrite论坛上的thread,片段永远不会发送到服务器。因此,除非您在事后使用AJAX更改页面,否则这可能是不可能的。

另一个想法是让Javascript将哈希转换为$ _GET参数,然后刷新页面。

答案 2 :(得分:0)

你可以通过AJAX将散列片段发送到PHP脚本并立即刷新(重新加载页面)

答案 3 :(得分:0)

通过AJAX将值发送到服务器后。您可以在SESSION中设置片段值。刷新页面时,可以获取在会话和进程中设置的片段,然后显示相应的内容。因为我们无法通过PHP_SELF / QUERY_STRING等获取片段值。我们需要这样来提高我们的网页速度,如Gmail。

答案 4 :(得分:-2)

它包含在PHP's parse_url function返回的“片段”值中。

从PHP手册:

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));

echo parse_url($url, PHP_URL_PATH);
?>

将返回:

Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)
/path