【问题标题】:PHP & Hash / Fragment Portion of URLURL的PHP​​和哈希/片段部分
【发布时间】:2010-11-12 19:37:29
【问题描述】:

我正在尝试找到一种方法来保存 url 的哈希部分并作为 PHP 变量。这个想法有点古怪,但请耐心等待......

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

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

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

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

原网址:

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

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

Apache 然后将链接重写为:

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

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

【问题讨论】:

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的回复!我知道片段永远不会发送到服务器。我提出的是“伪片段”或“双片段”,如example.com/fragment/#fragment 第一个片段将由 PHP 解释,然后由 mod_rewrite 删除,将 URL 呈现为example.com/#fragment 也许这种方法没有意义;我不确定它是否确实如此,因此我的问题......
    • 如果您想将该人发送回 example.com/#fragment,您可以将他们发送到 example.com/fragement,然后 PHP 可以将他们转发到 example.com/#fragement。跨度>
    • 将用户从“example.com/fragment”转发到“example.com/#fragment”的好主意。我将使用 cookie 来保存片段,然后将页面转发给它自己。这样的事情可能会起作用:示例:链接:example.com/test.php?fragment=turkey $fragment = $_GET['fragment']; if (isset($fragment)) { setcookie("TestCookie", "TestCookie", time()+3600); header("Location: example.com/test.php/#$fragment"); } // 根据 cookie 做一些额外的事情
    • 你最终会在历史堆栈中得到 2 个条目:(更糟糕的是,第一个总是指第二个,所以你的后退按钮导航会很麻烦。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      一旦您通过 AJAX 将值发送到服务器。您可以在 SESSION 中设置片段值。刷新页面时,可以得到在session中设置的fragment并处理,然后显示相应的内容。因为我们无法通过 PHP_SELF / QUERY_STRING 等获取片段值。我们需要这个来提高我们网页的速度,比如 Gmail。

      【讨论】:

        【解决方案5】:

        它包含在从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
        

        【讨论】:

        • 如果fragment是手动提供给这个函数的情况下是这样,但是与原始问题有关的问题是fragment部分没有发送到服务器。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多