首页 > 解决方案 > 将 URL 标准化为相同形式的 PHP

问题描述

我想根据列表检查 URL 以做出有关处理的选择(这将查看数据流,而不是作为应用程序中的路由器)但是 HTTP 使得以许多不同的方式表示相同的 URL 变得非常容易,例如(改编自RFC 2616):

http://example.com/~smith/home.html
http://example.com:80/~smith/home.html
http://EXAMPLE.com/%7Esmith/home.html
http://EXAMPLE.COM/%7esmith/home.html

都代表相同的目标资源。

我希望该设施将 URL 转换为规范形式...

有没有一种简单的方法可以始终如一地做到这一点?

(看来这些parse_url()都没有。)

标签: phpurl

解决方案


您可以使用glenscott/url-normalizer包进行符合规范 RFC 3986 的 URL 规范化。您可以在以下简单示例的帮助下查看规范化结果:

$urls = [
    'http://example.com/~smith/home.html',
    'http://example.com:80/~smith/home.html',
    'http://EXAMPLE.com/%7Esmith/home.html',
    'http://EXAMPLE.COM/%7esmith/home.html',
    'https://example.com:443/~smith/home.html'
];

foreach ($urls as $url) {
    $normalizer = new URL\Normalizer($url);
    echo $normalizer->normalize(), "</br>"; 
}

结果:

http://example.com/~smith/home.html

http://example.com/~smith/home.html

http://example.com/~smith/home.html

http://example.com/~smith/home.html

https://example.com/~smith/home.html


推荐阅读