微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP将URL标准化为相同形式

我想对照列表检查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转换为规范形式…

>主机名大小写要一致
>支持不是方案,用户名,密码,端口,路径,查询和片段的完整元组的URL
>明智地处理隐式端口和显式端口号
>产生的URL ascii编码为%….序列的扩展
>明智地处理路径中的“ ./”和“ ../”
>(可选)对查询中的变量进行一致排序

一个简单的方法可以始终如一地做到这一点吗?

(似乎parse_url()都不执行这些操作.)

解决方法:

您可以使用glenscott/url-normalizer软件包对URL进行规范化,以符合RFC 3986规范.您可以通过以下简单示例,通过帮助查看规范化的结果:

$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>"; 
}

结果:

07001

07001

07001

07001

07005

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐