Ошибка проверки URL PHP: http://https://example.com (он же https://https://example.com)) - PullRequest
2 голосов
/ 23 ноября 2011

У меня был шаблон регулярного выражения url:

$pattern = "@\b(https?://[^\s()<>\[\]\{\}]{1,".$max_length_allowed_for_each_url."}(?:\([\w\d]+\)|([^[:punct:]\s]|/)))@";

Похоже, что он работал очень хорошо при проверке любого URL, который я на него набросал, пока я не понял, что https://http://google.com (очевидно, даже stackoverflow считает, что действительный URL (он сделал этот URL кликабельным, а не я, хотя удалил одно из двоеточий) так что, может быть, мне не повезло?) был действительный URL-адрес, когда его, конечно, нет.

Я провел небольшое исследование ... и узнал, что я должен использовать filter_var вместо регулярного выражения для проверки URL PHP в любом случае ... и был разочарован, осознав, что он тоже подвержен этому та же проблема проверки.

Я мог бы легко победить это:

str_replace(array("https://http://","http://https://"), array("http://","https://"), $url);

Но ... это просто кажется неправильным.

1 Ответ

2 голосов
/ 23 ноября 2011

Ну, это действительный URI.Технически.Посмотрите на RFC для URI, если вы мне не верите.

  • Компонент пути URI может содержать //.
  • http - допустимое имя хоста.
  • Порт может отсутствовать, даже если присутствует : (он указан как *digit, а не 1*digit).(Вот почему Stack Overflow удалил двоеточие - он думал, что вы использовали порт по умолчанию, поэтому он удалил его из URI.)

Я предлагаю написать для этого специальный случай.На отдельном шаге проверьте, начинается ли URI с https?://https?://, и исправьте его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...