【问题标题】:What are fragment URLs and why to use them?什么是片段 URL 以及为什么要使用它们?
【发布时间】:2015-09-08 22:27:30
【问题描述】:

我是 PHP 开发新手。

今天我遇到了 URL 片段这个有趣的话题,特别是 URL 的 # 部分。

我搜了一下发现是这样的

www.example.com/foo.html#bar

但我不明白为什么需要这个#bar。或者如何在 PHP 中读取它?

【问题讨论】:

  • 你不是在 PHP 中阅读它,它是一个 javascript 的东西。片段永远不会发送到服务器。
  • PHP 想成为一种通用语言,所以它的 URL 库会解析片段。但是 PHP 最常用于响应 HTTP 客户端请求,它永远不会包含片段。所以这个问题有点令人困惑,因为 OP 没有说他是否在编写网络服务器软件。评级为 -1 的答案实际上对于“如何在 PHP 中阅读”是正确的,但可能具有误导性。 OP,请澄清您是否正在编写网络服务器软件?

标签: php url hash fragment-identifier


【解决方案1】:

片段是内部页面引用,有时称为命名锚。它通常出现在 URL 的末尾,以井号 (#) 字符开头,后跟标识符。它指的是网页中的一个部分。

在 HTML 文档中,浏览器会查找名称属性与片段匹配的锚标记。

关于片段有几件事,最重要的可能是它们不是在 HTTP 请求消息中发送的,但您可以在 this page 上找到有关它们的更多信息。

Javascript 可以操作当前页面上的片段,这些片段可用于为页面添加历史条目,而无需强制完全重新加载。

【讨论】:

    【解决方案2】:

    php 无法读取。它由客户端(浏览器)用于哈希导航,但您可以编写 JS 代码来处理哈希更改并将异步请求发送到您的服务器端(php)并在您的页面上显示结果。

    【讨论】:

      【解决方案3】:

      要通过 PHP 读取片段,您可以使用 'parse_url( $url, PHP_URL_FRAGMENT )' 函数。这个函数在一个内置的 PHP 函数中。以下示例可以帮助您了解如何使用它:

      $url = 'www.example.com/foo.html#bar';
      echo '<pre>';
      var_dump(parse_url($url, PHP_URL_FRAGMENT));
      echo '</pre>';
      

      结果是:

      字符串(3)“酒吧”

      有关 parse_url 的更多信息,您可以阅读this page

      【讨论】:

      • 虽然 parse_url 在你有一个完整的 URL 后工作,但 PHP 无法获得一个完整的 URL,包括锚名称。由于任何 JavaScript 和 DOM 可以操作的东西都可能需要由 PHP 处理,因此 PHP 无法获取调用它的整个 URL 是没有意义的。似乎很大,但在 PHP 中,除非我遗漏了什么。
      • @DavidSpector 我不确定这是 PHP 中的一个错误。根据定义,片段不会发送到服务器。由于 PHP 在服务器上运行,PHP 永远无法访问调用它的任何 URL 的片段。与任何其他基于服务器的网站框架(如 .NET、Ruby、node 等)相同。
      猜你喜欢
      • 2014-05-27
      • 2014-06-01
      • 2011-10-22
      • 2011-08-03
      • 2018-01-07
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 2022-01-22
      相关资源
      最近更新 更多