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