【问题标题】:How to check the equality of two identical URLs if one of them has "www"?如果其中一个具有“www”,如何检查两个相同 URL 的相等性?
【发布时间】:2016-03-14 04:10:04
【问题描述】:

以下网址相同:

我能否使用 .Net 框架中提供的方法(如 Uri 类中的 Compare() 方法)获得预期结果?还是我应该手动处理这种情况?

【问题讨论】:

  • 我真的怀疑是否存在标准解决方案,因为技术上这些 URL 并不相同,可能会导致不同的页面。所以你必须手动处理它们。
  • @DiligentKeyPresser 是正确的。您关于“以下 URL 相同”的断言是有缺陷的。他们不是。现在通常这两个域名都会解析到同一台主机。即使他们不这样做,通常他们也会返回相同的内容。但它们肯定不是同一个 URL。
  • 感谢您的笔记。我的意思是它们是“相同的”,因为它们返回相同的结果,所以我想使用 .NET 提供的方法将它们视为相同,似乎 Uri.Compare 方法不起作用,因为它们在技术上并不相同,所以我需要实现我自己的代码。

标签: c# .net


【解决方案1】:

很遗憾,我没有足够的代表留下简单的评论供您思考,所以我只留下一个答案作为思考的食物。

我可以看到一些可能的解决方案,它们应该涵盖大多数场景(我很确定我可能会错过很多,但每个人都会犯错误):

  1. 使用循环在两个 URI 上移动,并根据您认为合适的中断早期条件比较每个部分/组件以加快速度
  2. 使用任意定义的规则(例如,删除协议、删除 www 前缀、修剪结尾 /)尽可能多地清理 URI,然后使用 Equals() 进行比较
  3. 如果您觉得大胆,您可以使用类似于词法分析的方法将两个 URI 转换为对象/令牌/部分并比较后续结果(更难实现,但可能是最准确的)

请记住,cmets 中的人是对的。 URL 在技术上并不相同,您在最终解决方案中实现的逻辑纯粹是围绕您对“相同”的定义进行定义的。

另外,我不会使用简单替换“www”的解决方案。使用“”,因为有人疯狂 could easily put a 'www.' somewhere else in their URL 并破坏该实现,除非您在两个 URL 上执行替换,这也是非常危险的,因为一个可能有更多的“www”。实例比另一个实例,并且仍将被视为“相同”

【讨论】:

  • 虽然您的“评论”是有效的。引入您自己的词法分析时,它太复杂了。如果有的话,大多数语言都提供正则表达式或至少 string 操作 - 所以像 string.split 这样的东西在完成的工作和收益方面会更有效。
【解决方案2】:

如 cmets 中所述,这些实际上不是相同的 url,不能被视为相同。

除此之外,它可能会帮助您在删除 www 部分后检查是否相等:

string urla = @"http://example.com";
string urlb = @"http://www.example.com";

if (urlb.contains("www.")) urlb = urlb.replace("www.", "");
if (urla == urlb) {
    // url matches
}

【讨论】:

  • 可能只应与主机部分 urla.Host.xxxx == urlb.Host.xxxx 进行比较,这样在 urla.Scheme 上也无所谓(即 http、https)跨度>
猜你喜欢
  • 2021-05-06
  • 2015-01-25
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 2012-12-31
  • 1970-01-01
相关资源
最近更新 更多