Страницы

Поиск по вопросам

вторник, 31 декабря 2019 г.

Проверка валидности url. PHP

#php


Я нарыл такое:
$a = 'http://site.ru';
if (preg_match('/^(http:\/\/|https:\/\/)?[0-9a-zA-Zа-яА-ЯёЁ]{1,3}+[.][0-9a-zA-Zа-яА-ЯёЁ]+[.][0-9a-zA-Zа-яА-ЯёЁ]{2,6}+$/',
$a)) echo "yes";
else echo "no";

Но эта штука все время выдает "no". Мне кажется это из за кириллицы. Ее убирать нельзя.
сайт.рф ведь... Помогите пожалуйста, как исправить. Я работаю в кодировке UTF-8

Вот нарыл по-лучше, но не могу кириллицу добавить.. Помогите плиз
function is_url($in){ 
    $w = "a-z0-9"; 
    $url_pattern = "#( 
    (?:f|ht)tps?://(?:www.)? 
    (?:[$w\\-.]+/?\\.[a-z]{2,4})/? 
    (?:[$w\\-./\\#]+)? 
    (?:\\?[$w\\-&=;\\#]+)? 
    )#xi";

    $a = preg_match($url_pattern,$in); 
    return $a; 
}
    


Ответы

Ответ 1



Для проверки url советую : filter_var($url, FILTER_VALIDATE_URL) В плане проверки русскоязычных доменов могу рекомендовать смотреть в сторону конвертации в IDN, т.е. к виду xn--af1bc.net тогда проблем с русским точно не будет. В стандартном наборе таких функций нет, только декодирование. Если есть возможность поставить соответствующий модуль PECL, то на мой взгляд это идеальное решение.

Ответ 2



Если вам надо проверить, существует ли указанный адрес или нет, то есть способ гораздо проще: $url = 'http://hashcode.ru'; if(get_headers($url, 1)){ echo 'Гуд'; } Потому, как http://www.chopopalo.com - проверку регуляркой пройдет, но вот сайта такого, просто не существует.

Ответ 3



Вообще не встречал адекватных регулярок для проверки url. Так что для таких случаев нужно четко формировать требования к урлу, а потом уже составлять выражение. $a у Вас не соответствует выражению, в то время как "http://www.site.ru" - вполне подойдет. А вот "http://subdomen.site.ru" - уже не влезет. Если урл еще ведет на внутреннюю страницу - тоже не подходит. А зачастую главными являются страницы вида "http://site.ru/en/index.html". И т.д. И т.п. С русским языком проблем быть не должно, а если всё-таки возникают - значит у Вас старое ПО, пропишите в регулярку весь алфавит. Регулярное выражение сложных URL

Ответ 4



function is_url($url) { return preg_match('|^http(s)?://[a-z0-9-]+(.[a-z0-9-]+)*(:[0-9]+)?(/.*)?$|i', $url); }

Комментариев нет:

Отправить комментарий