使用IsWellFormedOriginalString验证URL失败



我想验证一个URL。我第一次使用Uri.TryCreate。但这会为具有无效特殊字符的链接创建一个有效的URL对象,如以下字符:https://www.z�rich.ch。因此,我尝试了IsWellFormedOriginalString,结果如下:

(new System.Uri("https://www.z�rich.ch")).IsWellFormedOriginalString().Display(); //false
(new System.Uri("https://www.google.ch?q=Schüler")).IsWellFormedOriginalString().Display(); //true
(new System.Uri("https://www.google.ch?q=Schuler%20Lehrer")).IsWellFormedOriginalString().Display(); //true
(new System.Uri("https://www.google.ch?q=Schüler%20Lehrer")).IsWellFormedOriginalString().Display(); //false

为什么具有ü%20的URL正确,而同时具有(ü%20(的URL不正确

是否有一种方法来验证上面的URL,并且只有第一种情况是无效的?我知道,我可以明确地检查,但可能还有更通用的东西。

第一个URL包含URL中不允许的字符。当然,很明显它应该是u或ü,但字符串可能是从UTF-8转换为8位编码的,其中Unicodeü在目标代码页中没有匹配项。

在第4个URL的情况下,%20可以替换为+来表示空间,这是在查询字符串中对空间进行编码的正确方式。ü可能被视为指示与不存在此类字符时不同的编码。

第四个网址是你自己写的吗?我想知道为什么有%20而不是+,因为当我点击链接并点击搜索时,谷歌本身在URL中使用了+而不是%20。

最新更新