2017-05-09 4 views
1

URLが有効かどうかを確認する必要のあるC#(.Net Core 1.1)アプリケーションがあります。私はUri.IsWellFormedUriString()を使用していますが、これはかなりうまく動作しますが、以下を疑問視してfalseを返します。 URLは完全に有効であると思われますか?URLが正しい場合、Uri.IsWellFormedUriString()はfalseを返します。

Uri.IsWellFormedUriString("http://www.test.com/search/Le+Venezuela+b%C3%A9n%C3%A9ficie+d%27importantes+ressources+naturelles+%3A+p%C3%A9trole%2C+gaz%2C+mines", UriKind.Absolute) 

私はURLが正しくフォーマットされたと言うこれを下回るPHP関数とまったく同じURLを使用:

function filter_var($url, FILTER_VALIDATE_URL) 

私はここで何かが足りないのですか?

答えて

2

おそらく問題は、URLがエスケープされていることです。 UnscapeDataStringを使用して、これを試してみてください:

string urlencoded= "http://www.test.com/search/Le+Venezuela+b%C3%A9n%C3%A9ficie+d%27importantes+ressources+naturelles+%3A+p%C3%A9trole%2C+gaz%2C+mines"; 
var isWellFormed=Uri.IsWellFormedUriString(
         Uri.UnescapeDataString(urlencoded), 
         UriKind.Absolute); 

EDITは、.NETのコアを使用していると

は、多分あなたは問題が不必要に%2C、あるSystem.Net.WebUtility.UrlDecode

1

を使用する必要があります逃げた。カンマにして、真実を報告します。

+1

しかしこれはすべての話ではありません。「http://www.test.com/x%2C」 'も' true'と報告します。 '' http://x.com/%C3%A9x%2C ''は壊れていますが、'%C3'、 '%A9'、' x'や '%2C'を削除すると大丈夫です。よくわかりません。 –

+0

あなたは正しいですし、@ JonSkeetもあります。だから、うまくいかないかどうかをチェックする前にURLをエスケープしないでください。 – Pikoh

+0

@JonSkeetは、2番目の例をunscapして再度エスケープすると、http:// x.com /%C3%A9xとなります正しくエスケープされたuriとみなされるものです – Pikoh

関連する問題