0

私はこの定期的な例外があります:

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

1)URLを解析する場合:http ://test.ru/long/path/file.ext?queryparam = 123&more =234 -OK

http://viper-7.com/QNCAQu

2)URLを解析する場合: ftp:// admin :pass@server.com/long/path/file.ext-OK

http://viper-7.com/jkQHpP

3)ただし、GETパラメータに[AT](@)が存在する場合は、正しく機能しません。

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

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

PS。定期的な例外はstackoverflowで見つかりますが、トピックを覚えていません。:(

4

2 に答える 2

3

不正な形式のURLであるため、失敗するのは正しいことです。

URLは次のようになります

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

不正な形式のtest@domain.comの代わりに。

javascript関数encodeURIComponent('@');はあなたの友達です:D

于 2013-02-25T09:13:52.673 に答える
2

URLを解析しようとしている場合、正規表現は方法ではありません。PHPには、簡単にアクセスできるようにURLをセグメントに分割するparse_url()という組み込み関数があります。より効率的ではるかに少ないコード。さらに、parse_str()を使用してクエリセグメントをさらに分割できます。最後に、パスを分割する場合は、 pathinfo()を使用することもできます。PHPにはこれらすべてがすぐに利用できるので、使い始める必要があります。

于 2013-02-25T09:25:23.860 に答える