PHP: почему не нужно искать URL-адреса регулярками
Потому что с версии 5.2 есть функция filter_var с рядом готовых фильтров на данные, вот их списки.
В частности, есть FILTER_VALIDATE_EMAIL
, FILTER_VALIDATE_IP
, FILTER_VALIDATE_URL
и т.п., писать вот такие выражения становится излишеством.
Приведём пример того, как из массива строк $tests
вытаскиваются URL-адреса, код выполнялся на Denwer и предполагает, что файл размещён к кодировке Юникода UTF-8.
<?php $tests = array( 'this URI contains an illegal character, parentheses and a misplaced full stop:', 'http://en.wikipedia.org/wiki/Erich_Kastner_(camera_designer). (which is handled by http://mediawiki.org/).', 'and another one just to confuse the parser: http://en.wikipedia.org/wiki/-)', '")" is handled the wrong way by the mediawiki parser.', 'ftp://domain.name/path(balanced_brackets)/foo.html', 'ftp://domain.name/path(balanced_brackets)/ending.in.dot.', 'ftp://domain.name/path(unbalanced_brackets/ending.in.dot.', 'leading junk ftp://domain.name/path/embedded?punct/uation.', 'leading junk ftp://domain.name/dangling_close_paren)', 'if you have other interesting URIs for testing, please add them here:', 'http://www.example.org/foo.html#includes_fragment', 'http://www.example.org/foo.html#enthält_Unicode-Fragment', ' http://192.168.0.1/admin/?', 'blah (foo://domain.hld/))))', 'https://haxor.ur:8080/~foo/####&?bar' ); foreach ($tests as $test) { foreach (preg_split("/\s/msiu",$test ) as $uri) { if (filter_var ($uri, FILTER_VALIDATE_URL)) { echo '<br>'.$uri; //Просто печатаем найденный URI } } } ?>
10.11.2018, 12:57 [1680 просмотров]