【问题标题】:How do I apply URL normalization rules in PHP?如何在 PHP 中应用 URL 规范化规则?
【发布时间】:2011-05-09 16:55:21
【问题描述】:

PHP 中是否有预先存在的用于 URL 规范化的函数或类?

具体来说,遵循wikipedia article on URL normalization 中规定的语义保留规范化规则,(或我应该遵循的任何“标准”)。

  • 将方案和主机转换为小写
  • 转义序列中的字母大写
  • 添加尾随 /(到目录,而不是文件)
  • 删除默认端口
  • 删除点段

现在,我想我将只使用 parse_url(),并单独应用规则,但我宁愿避免重新发明轮子。

【问题讨论】:

  • @ajreal 不,不是<link rel="canonical"...>。只是,规范化 URL,例如,从 API 请求有关它的数据,特别是那些需要对 URL 进行哈希处理的数据,因此如果您不使用规范化 URL,您将得到不准确或没有结果。
  • @yc : http://stackoverflow.comhttp://stackoverflow.com// 之间的区别是什么?你能提供更多你尽量避免的网址示例吗?
  • 巨大的差异!前者散列 (md5) 为 57f4dad48e7a4f7cd171c654226feb5a,后者散列为 8b34e6ecb6898f39350c1264d6d7aa6c。就我而言,它们是不同的 URL,即使服务器会解决差异。有一个链接到的标准,旨在创建规范化的 URL。我不是在这里发明一个概念。有一整篇 wiki 文章专门讨论这一现象。

标签: php url normalization


【解决方案1】:

Pear Net_URL2 库看起来至少可以满足您的部分需求。它将删除点段,修复大小写并摆脱默认端口:

include("Net/URL2.php");
$url = new Net_URL2('HTTP://example.com:80/a/../b/c');
print $url->getNormalizedURL();

发射:

http://example.com/b/c

我怀疑是否存在向目录添加尾部斜杠的通用机制,因为您需要一种将 url 映射到目录的方法,这很难以通用方式进行。但已经很接近了。

参考资料:

【讨论】:

    猜你喜欢
    • 2012-05-22
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 2011-03-08
    • 2011-01-08
    • 2011-02-28
    • 2017-06-30
    相关资源
    最近更新 更多