我最近一直致力于一个项目,我必须检查一堆URL的有效性。 URL实际上不必存在,它们必须合理。为此,我打算使用库中的Uri.IsWellFormedUri
(避免修改正则表达式)。
但是,我注意到有些网址被认为是有缺陷的,尽管它们对我来说似乎是正确的。具体来说,问题似乎来自URL的编码部分百分比。下面是一个显示示例的小程序:
class Program
{
static void Main(string[] args)
{
string uriBase = "http://example.com/share.html?title=";
string leftEncoded = "ab%C3%BCde";
string rightEncoded = "ef%20%C7%20ghij";
Console.WriteLine("Now testing if uri is well formed:");
Console.WriteLine("Combined URI: " + Uri.IsWellFormedUriString(uriBase + leftEncoded + rightEncoded, UriKind.RelativeOrAbsolute));
Console.WriteLine("Only left part: " + Uri.IsWellFormedUriString(uriBase + leftEncoded, UriKind.RelativeOrAbsolute));
Console.WriteLine("Only right part: " + Uri.IsWellFormedUriString(uriBase + rightEncoded, UriKind.RelativeOrAbsolute));
Console.ReadLine();
}
}
该程序提供以下输出:
Now testing if uri is well formed:
Combined URI: False
Only left part: True
Only right part: True
为什么长网址不被接受为正确?此字符串的“标题”部分仅是自身接受的部分的串联。据我所知,这个URL确实可以正常工作,因此应该有效。
非常感谢任何帮助!