定期URL解析不以@符号工作正确

我有这个规律的例外:定期URL解析不以@符号工作正确

(?:([^\:]*)\:\/\/)?(?:([^\:\@]*)(?:\:([^\@]*))?\@)?(?:([^\/\:]*)\.(?=[^\.\/\:]*\.[^\.\/\:]*))?([^\.\/\:]*)(?:\.([^\/\.\:]*))?(?:\:([0-9]*))?(\/[^\?#]*(?=.*?\/)\/)?([^\?#]*)?(?:\?([^#]*))?(?:#(.*))? 

1)如果解析网址:http://test.ru/long/path/file.ext?queryparam=123&more=234 - 其确定

http://viper-7.com/QNCAQu

2)如果解析URL :ftp://admin:[email protected]/long/path/file.ext - 其确定

http://viper-7.com/jkQHpP

3)但是,如果GET参数中存在[AT](@),那么它是不正确的!

实施例:http://test.ru/long/path/file.ext?queryparam=123&[email protected]

http://viper-7.com/9qIdcj

PS。定期例外找到计算器,但不记得的话题。:(

回答:

这是正确的,它失败,因为它是一个错误的URL。

URL应阅读

http://test.ru/long/path/file.ext?queryparam=123&mail=test%40domain.com 

的,而不是。畸形[email protected]

JavaScript函数encodeURIComponent('@');是你的朋友:d

回答:

如果你试图解析URL,正则表达式不是这样。 PHP有一个名为parse_url()的内置函数,它会将URL分成多个段,以便于访问。更高效,更少代码。另外,您可以进一步分解查询段parse_str()最后,如果您想分解路径,也可以使用pathinfo()。 PHP拥有所有这些,你只需要开始使用它们。

以上是 定期URL解析不以@符号工作正确 的全部内容, 来源链接: utcz.com/qa/259347.html

回到顶部