我想验证一个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。