Распознавать «неверные» URL-адреса, не пытаясь разрешить их - PullRequest
0 голосов
/ 13 июня 2011

Я создаю приложение Facebook, которое собирает URL-адреса из различных источников в учетной записи пользователя Facebook - например, лайки пользователя.

Проблема, с которой я столкнулся, состоит в том, что во многих записях Facebook есть строка, котораяне являются URL-адресами в их полях "сайт" и "ссылка".Facebook не проверяет пользовательский ввод, поэтому эти поля могут по существу содержать любую строку.

Я хочу иметь возможность обрабатывать строки в этих полях таким образом, чтобы URL-адреса, такие как "http://google.com", "https://www.bankofamerica.com", "http://www.nytimes.com/2011/06/13/us/13fbi.html?_r=1&hp","bit.ly", "www.pbs.org" все приняты.

И все строки типа "here is a random string of text the user entered", "here'\s ano!!! #%#$^ther weird random string" все отклонены.

Мне кажется, единственный способ быть "уверенным"«URL-адрес - это попытка разрешить его, но я считаю, что это будет чрезмерно ресурсоемким.

Может кто-нибудь придумать умный способ регулярного выражения или иным образом проанализировать эти строки так, чтобы« много »URL-адресовправильно пойман - 80%?95% 99,995% URL-адресов?

Спасибо!


РЕДАКТИРОВАТЬ: К вашему сведению, я занимаюсь разработкой на Python.Но решение, не зависящее от языка, также прекрасно.

Ответы [ 2 ]

1 голос
/ 13 июня 2011

Существует множество инструментов для проверки URL в зависимости от языка разработки. Предполагая, что вы разрабатываете на JavaScript, быстрый поиск в Google находит множество подходов, в зависимости от уровня надежности, который вам необходим.

См. http://www.w3.org/Addressing/URL/url-spec.txt для достоверной спецификации.

1 голос
/ 13 июня 2011

Сначала я сопоставлю "^(?:https?://)?([A-Za-z0-9-\.]+)/", а затем выполню поиск DNS (кэшированный) для этого имени хоста, если вы хотите убедиться, что имя хоста не написано с ошибкой. Техника 95% использует белый список доменов верхнего уровня (или какое-то регулярное выражение для них), которые вы должны будете поддерживать, когда станут доступны новые (.info, .eu, .biz, .aero). Существуют также определенные символы, которые не разрешены (не экранированы) в URL-адресах - однако некоторые люди вводят URL-адреса, например "http://example.com/I don't wanna go!!!", и их браузер затем экранирует их до действительного "...I%20don%27t%20wanna%20go%21%21%21".

...