Если у меня есть Мнение URL http://www.example.com/
и другой, говорят http://www.example.com
. Каков был бы самый безопасный способ определить, ли и то же, не запрашивая для веб-страницы, и разность?
ПРИМЕРЫ:
http://www.example.com/
VS http://www.example.com
(Упомянутый выше)http://www.example.com/aa/../
VS http://www.example.com
Править: Разъяснения: Просто хочу знать, являются ли URL тем же в контексте того, чтобы быть эквивалентным согласно стандарту RFC 1738.
В .Net вы можете использовать класс System.Uri .
let u1 = new Uri (" http://www.google.com/ ") ;;
val u1: Uri = http://www.google.com /
let u2 = new Uri (" http://www.google.com ") ;;
val u2: Uri = http://www.google.com /
u1.Equals(u2);;
val it: bool = true
Для более детального сравнения вы можете использовать метод Uri.Compare . Существуют также статические методы для работы с различными формами экранирования и кодирования символов в строке Uri, которые, несомненно, окажутся полезными при тщательном рассмотрении темы.
Без запроса URL-адреса мало что можно сделать. Но вы можете определить несколько эвристик:
.htm
и .html
то же самое / base /
и /base/index.html
одинаковы url.com
и www.url.com
то же самое. Все очень зависит от того, что именно вы подразумеваете под «одинаковыми» URL.
Для тех из вас, кто не знает F #, вот быстрое и грязное, но законченное консольное приложение на C #, которое демонстрирует использование класса Uri, чтобы определить, совпадают ли два URL-адреса. Когда вы запустите этот код, вы должны увидеть две строки: «истина», за которой следует «ложь»:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(IsSameUrl("http://stackoverflow.com/", "http://stackoverflow.com").ToString());
Console.WriteLine(IsSameUrl("http://stackoverflow.com/", "http://codinghorror.com").ToString());
Console.ReadKey();
}
static bool IsSameUrl(string url1, string url2)
{
Uri u1 = new Uri(url1);
Uri u2 = new Uri(url2);
return u1.Equals(u2);
}
}
}
Есть несколько вещей, которые можно добавить к ответам Yuval A: