将网址转换为有效的 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 的功能也将是一个不错的奖励。

将网址转换为有效的 href 值

几个月前我们遇到了这个问题,需要一种一致的方式来确保 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 部分。