it-swarm.com.ru

Проверка URL в PHP

Возможный дубликат:
PHP проверка/регулярное выражение для URL

Есть ли простой, безопасный и быстрый способ проверить, действителен ли URL в PHP?

22
Oliver 'Oli' Jensen

Да, есть! Используйте filter_var :

if (filter_var($url, FILTER_VALIDATE_URL) !== false) ...

FILTER_VALIDATE_URL проверяет URL в соответствии с RFC 2396 .

54
Dan Grossman

Хорошо, если мы посмотрим на RFC 3986 мы можем найти определение URL.

И если мы посмотрим на Приложение B, то есть руководство по использованию регулярных выражений для разбора URL:

Приложение B. Разбор ссылки на URI с помощью регулярного выражения

Поскольку алгоритм «первый матч-выигрыш» идентичен «жадному»
метод устранения неоднозначности, используемый регулярными выражениями POSIX, это
естественным и обычным явлением использования регулярного выражения для разбора
потенциальные пять компонентов ссылки URI.

Следующая строка - это регулярное выражение для разбиения
правильно сформированная ссылка URI на его компоненты.

  ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
   12            3  4          5       6  7        8 9

Цифры во второй строке выше служат только для помощи читаемость; они указывают контрольные точки для каждого подвыражение (то есть каждая парная скобка). Мы ссылаемся на значение для подвыражения соответствует $. Например, соответствие вышеуказанное выражение для

  http://www.ics.uci.edu/pub/ietf/uri/#Related

приводит к следующим совпадениям подвыражения:

  $1 = http:
  $2 = http
  $3 = //www.ics.uci.edu
  $4 = www.ics.uci.edu
  $5 = /pub/ietf/uri/
  $6 = <undefined>
  $7 = <undefined>
  $8 = #Related
  $9 = Related

где указывает, что компонента нет, как это случай для компонента запроса в приведенном выше примере. Следовательно, мы можем определить стоимость пяти компонентов как

  scheme    = $2
  authority = $4
  path      = $5
  query     = $7
  fragment  = $9

Идя в обратном направлении, мы можем воссоздать ссылку на URI из его составляющих с использованием алгоритма раздела 5.3.

Вы можете использовать это регулярное выражение для синтаксического анализа URL-адреса вручную или использовать встроенную функцию parse_url avalable в PHP 4 и 5

14
Devin M

Это зависит от вашего определения действительного. Семантически действительный, доменное имя разрешается и т.д. 

Быстрый подход заключается в использовании preg_match для проверки URL с хорошим регулярным выражением для проверки его правильного формата. В этой теме есть несколько хороших примеров PHP проверка/регулярное выражение для URL

0
Code Magician