在你告诉我使用parse_url
之前,它不够好并且有太多错误。关于解析URL的主题有很多问题可以在这里找到,但几乎所有问题都只解析某些特定类别的URL或者不完整。
我正在寻找一个符合RFC标准的最终URL解析器,它可以可靠地处理浏览器可能遇到的任何URL。在此我包括:
#
,#title
blah/thing.php
/blah/thing.php
//ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js
callto:+442079460123
file:///Users/me/thisfile.txt
mailto:user@example.com?subject=hello
,mailto:?subject=hello
并支持所有常用的scheme / authentication / domain / path / query / fragment等,并将所有这些元素分解为一个数组,并为相对/无模式URL提供额外的标志。理想情况下,它会带有一个支持相同元素的URL重构器(如http_build_url),我也想要应用验证(即如果它无效,它应该能够对URL进行最佳猜测,但标记它就像这样,就像浏览器一样。)
This answer包含了对这种野兽的诱人的费马风格参考,但它实际上并没有去任何地方。
我查看了所有主要框架,但它们似乎只提供了围绕parse_url的瘦包装器,这通常是一个不好的起点,因为它会犯很多错误。
那么,这样的事情是否存在?
答案 0 :(得分:3)
不确定parse_url()
有多少错误,但这可能会有所帮助:
由于“第一场比赛胜利”算法与“贪婪”相同 POSIX正则表达式使用的消歧方法,它是 自然而普通的使用正则表达式来解析 URI引用的潜在五个组件。
以下行是用于分解a的正则表达式 格式良好的URI引用到其组件中。
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
12 3 4 5 6 7 8 9
来源:http://tools.ietf.org/html/rfc3986#page-51
它将位置分解为:
$2 - scheme
$4 - host
$5 - path
$6 - query string
$8 - fragment
要重建,您可以使用:
$1 . $3 . $5 . $6 . $8