2017-05-09 5 views
1

Ich habe eine C# (.Net Core 1.1) -App, die prüfen muss, ob eine URL gültig ist. Ich habe die Uri.IsWellFormedUriString() verwendet, die ziemlich gut funktioniert, aber daran zweifle, dass unter dem Wert false zurückgegeben wird. Es scheint mir, dass die URL perfekt ist?Uri.IsWellFormedUriString() gibt false für eine korrekte URL zurück

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) 

verwendete ich den gleichen URL mit der PHP-Funktion unter dem sagt die URL richtig formatiert ist:

function filter_var($url, FILTER_VALIDATE_URL) 

bin ich etwas fehlt hier?

Antwort

2

Wahrscheinlich ist das Problem, dass die URL maskiert ist. Versuchen Sie, diese mit 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

Wie Sie .net Kern verwenden, vielleicht brauchen Sie System.Net.WebUtility.UrlDecode

1

Das Problem ist die %2C, die unnötig zu bedienen entkam; mach es zu einem Komma, und es meldet sich wahr.

+1

Das ist jedoch nicht die ganze Geschichte: '" http://www.test.com/x%2C "' meldet 'wahr' auch. '" http://x.com/%C3%A9x%2C "' ist kaputt, aber das Entfernen des '% C3', des'% A9', des 'x' oder des'% 2C' macht es in Ordnung. Ich bin verwirrt. –

+0

Sie haben Recht, und @JonSkeet auch. Also vielleicht ist es keine schlechte Idee, die URL zu entsichern, bevor man überprüft, ob es wohlgeformt ist – Pikoh

+0

@JonSkeet dein zweites Beispiel uncaping und es wieder entkommt gibt es 'http: // x.com /% C3% A9x,', so denke ich das ist, was als richtig entgangene uri gilt – Pikoh