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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...