如何在 PHP 中应用 URL 规范化规则?

发布于 2024-10-01 19:29:31 字数 355 浏览 3 评论 0原文

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

具体来说,遵循关于 URL 规范化的维基百科文章中规定的语义保留规范化规则,(或其他内容)我应该遵循的“标准”)。

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

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

Is there a pre-existing function or class for URL normalization in PHP?

Specifically, following the semantic preserving normalization rules laid out in this wikipedia article on URL normalization, (or whatever 'standard' I should be following).

  • Converting the scheme and host to lower case
  • Capitalizing letters in escape sequences
  • Adding trailing / (to directories, not files)
  • Removing the default port
  • Removing dot-segments

Right now, I'm thinking that I'll just use parse_url(), and apply the rules individually, but I'd prefer to avoid reinventing the wheel.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

临走之时 2024-10-08 19:29:31

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 映射到目录的方法,这在通用中很难做到方式。但已经很接近了。

参考文献:

The Pear Net_URL2 library looks like it'll do at least part of what you want. It'll remove dot segments, fix capitalization and get rid of the default port:

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

emits:

http://example.com/b/c

I doubt there's a general purpose mechanism for adding trailing slashes to directories because you need a way to map urls to directories which is challenging to do in a generic way. But it's close.

References:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文