将网址转换为有效的 href 值
本文关键字:href 有效 转换 | 更新日期: 2023-09-27 18:31:41
首先,这似乎是以前应该问过的事情,但我找不到任何可以回答我的问题的东西。
我的任务的基本概述是在基于用户定义的网址的网页上呈现锚链接。由于地址是用户定义的,因此可以采用任何格式,例如:
- http://www.example.com
- https://www.example.com
- www.example.com
- example.com
我需要对此值做的是将其设置为锚标记的href
属性。现在,问题是(至少在Chrome中)只有前两个示例可以工作,因为它们被识别为绝对URL路径。最后两个示例将重定向到同一域(即被视为相对路径)
因此,最终的问题是:格式化这些值以确保使用一致的绝对路径的最佳方法是什么?我可以检查 http/https 并在缺少时添加它,但我希望可能有一个开箱即用的 .Net 类会更可靠。
此外,由于这是一个用户定义的值,因此无论如何它都可能是完全的垃圾,因此验证 URL 的功能也将是一个不错的奖励。
几个月前我们遇到了这个问题,需要一种一致的方式来确保 URL 是绝对的。我们还想要一种删除在网页上显示 URL http(s)://
的方法。
我想出了这个功能:
public static string FormatUrl(string Url, bool IncludeHttp = null)
{
Url = Url.ToLower();
switch (IncludeHttp) {
case true:
if (!(Url.StartsWith("http://") || Url.StartsWith("https://")))
Url = "http://" + Url;
break;
case false:
if (Url.StartsWith("http://"))
Url = Url.Remove(0, "http://".Length);
if (Url.StartsWith("https://"))
Url = Url.Remove(0, "https://".Length);
break;
}
return Url;
}
我知道您正在寻找一个"开箱即用"的库,但这可能会有所帮助。
我认为"开箱即用"解决方案的问题在于该功能不知道 URL 应该是http://
还是https://
。使用我的函数,我假设它会http://
,但对于某些 URL,您需要https://
.如果Microsoft要在框架中构建这样的东西,从一开始就会有问题。
您可以尝试使用 Uri 类的重载:
Uri 构造函数(字符串)
此构造函数从 URI 字符串创建 Uri 实例。它分析 URI,将其置于规范格式,并进行任何所需的转义编码。
此构造函数不确保 Uri 引用可访问的资源。
此构造函数假定字符串参数引用绝对 URI,等效于调用 UriKind 设置为"绝对"的 Uri 构造函数。如果传递给构造函数的字符串参数是相对 URI,则此构造函数将引发 UriFormatException。
这将尝试从用户输入构造规范 Uri。而且您有很多属性来检查和提取所需的 URL 部分。