Имею функцию по проверке URL:
function checkurl($url) {
$url=trim($url);
if (strlen($url)==0) return 1;
if (!preg_match("~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}".
"(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|".
"org|mil|pro|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?".
"!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&".
"?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~i",$url,$ok))
return -1;
if (!strstr($url,"://")) $url="http://".$url;
$url=preg_replace("~^[a-z]+~ie","strtolower('\\0')",$url);
$url = parse_url($url);
$url = $url["host"];
return $url;
}
Мне нужно добавить сюда поддержку кириллических доменов, таких как мойсайт.рф
Подскажите как правильно мне это сделать?
Спустя 1 час, 22 минуты, 40 секунд (3.06.2011 - 10:49) DedMorozzz написал(а):
Цитата |
(?:com|net|". "org|mil|pro|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2}) |
Вот сюда добавляем рф твоё
|inc|name|рф|[a-z]{2}..
Спустя 4 минуты, 19 секунд (3.06.2011 - 10:54) 5maks5 написал(а):
То что Вы предложили верно, но функция не пропускает русские буквы домена. Даже если я добавляю рф в список доменных зон, то возвращается return -1 следовательно домен мойсайт.рф не прошёл.
Спустя 2 минуты, 42 секунды (3.06.2011 - 10:56) DedMorozzz написал(а):
добавь модификатор "u" в конец
Замени :#[^ '\"&<>]*)?$~i На :#[^ '\"&<>]*)?$~iu
Замени :#[^ '\"&<>]*)?$~i На :#[^ '\"&<>]*)?$~iu
Спустя 2 минуты, 46 секунд (3.06.2011 - 10:59) 5maks5 написал(а):
Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 160 in /ххххххххх/check_url.php on line 25
25-ая строка: "?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~iu",$url,$ok))
25-ая строка: "?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~iu",$url,$ok))
Спустя 2 минуты, 33 секунды (3.06.2011 - 11:02) DedMorozzz написал(а):
ммм, уже интересно, начит юникод не нужен, а вот почему не находит, сейчас разберусь, у себя протестирую регулярку, после отпишусь
Спустя 4 минуты, 15 секунд (3.06.2011 - 11:06) DedMorozzz написал(а):
Не возникло проблем:
Цитата |
<?php $url = 'http://www.google.рф'; if (!preg_match("~^(??:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}". "(?::[a-z0-9_-]{1,32})?@)?)?(??:[a-z0-9-]{1,128}\.)+(?:com|net|". "org|mil|pro|edu|arpa|gov|biz|info|aero|inc|name|рф|[a-z]{2})|(?!0)(??". "!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&". "?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~i",$url)) echo "No"; else{echo "Yes";} ?> |
Yes вывело
Спустя 3 минуты, 40 секунд (3.06.2011 - 11:10) 5maks5 написал(а):
результат -1
http://seo.celsoft.ru/ введите тут google.рф и нажмите проверить сами увидите.
http://seo.celsoft.ru/ введите тут google.рф и нажмите проверить сами увидите.
Спустя 4 минуты, 35 секунд (3.06.2011 - 11:14) 5maks5 написал(а):
Вставил ваш код в чистый файл и запустил. Результат:
Warning: preg_match() [function.preg-match]: Compilation failed: unrecognized character after (? or (?- at offset 4 in /home/p27064/www/seo.celsoft.ru/1.php on line 10
No
Warning: preg_match() [function.preg-match]: Compilation failed: unrecognized character after (? or (?- at offset 4 in /home/p27064/www/seo.celsoft.ru/1.php on line 10
No
Спустя 2 минуты, 8 секунд (3.06.2011 - 11:16) DedMorozzz написал(а):
у тебя походу проверяется существование такого адресса. Добавь ещё и сам адресс, что бы был на русском, к примеру поисковик "Нигма.РФ", дабы проще было тестить
Хм, а текст в файле в какой кодировке? -- хотя не важно это. Я и в 1251 проверил всё работает
Хм, а текст в файле в какой кодировке? -- хотя не важно это. Я и в 1251 проверил всё работает
Спустя 7 минут, 8 секунд (3.06.2011 - 11:23) DedMorozzz написал(а):
показывай код который вставил, ибо вот залил на хостинг
***Убрал***
***Убрал***
Спустя 5 минут, 25 секунд (3.06.2011 - 11:29) 5maks5 написал(а):
<?php
$url = 'http://www.google.рф';
if (!preg_match("~^(?sad.gif?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}".
"(?::[a-z0-9_-]{1,32})?@)?)?(?sad.gif?:[a-z0-9-]{1,128}\.)+(?:com|net|".
"org|mil|pro|edu|arpa|gov|biz|info|aero|inc|name|рф|[a-z]{2})|(?!0)(?sad.gif?".
"!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&".
"?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~i",$url))
echo "No";
else{echo "Yes";}
?>
Спустя 56 секунд (3.06.2011 - 11:30) 5maks5 написал(а):
Вставь код в пхп теги что бы на смайлы не заменялось
Спустя 54 секунды (3.06.2011 - 11:31) DedMorozzz написал(а):
:))
?sad.gif?:h
Смайлы покопировал
?sad.gif?:h
Смайлы покопировал
$url = 'http://www.google.рф';
if (!preg_match("~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}".
"(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|".
"org|mil|pro|edu|arpa|gov|biz|info|aero|inc|name|рф|[a-z]{2})|(?!0)(?:(?".
"!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&".
"?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~i",$url))
echo "No";
else{echo "Yes";}
?>
Цитата |
Вставь код в пхп теги что бы на смайлы не заменялось |
теги не причём. Надо галочку убрать "Включить смайлы"
Спустя 9 минут, 23 секунды (3.06.2011 - 11:40) 5maks5 написал(а):
Сработало. Доменная зона рф прошла. Теперь еще надо сделать что бы и домен само название домена проходило. мойсайт.рф к примеру
P.S. Извиняюсь за грамматику, дел много по дому. Всё делаю торопясь.
P.S. Извиняюсь за грамматику, дел много по дому. Всё делаю торопясь.
Спустя 6 минут, 59 секунд (3.06.2011 - 11:47) DedMorozzz написал(а):
(?:(?:[a-z0-9-]{1,128}\.)+замени на
(?:(?:[a-z0-9а-яё-]{1,128}\.)+
Спустя 7 минут, 4 секунды (3.06.2011 - 11:54) 5maks5 написал(а):
Всё работает. Огромнейшее спасибо Вам что помогли мне.
Сейчас надо будет еще подумать как сделать так, что когда урл приходит гетом в файл, а там уже проверка если домен мойсайт.рф, то пускать дальше, если moysite.ru(com,net и т.д.) то тоже пускать процесс дальше, а вот если пришёл домен moysite.рф или мойсайт.ru(com,net и т.д.) то выдавать ошибку что формат домена неверен. Направьте меня в нужное русло пожалуйста ))
Сейчас надо будет еще подумать как сделать так, что когда урл приходит гетом в файл, а там уже проверка если домен мойсайт.рф, то пускать дальше, если moysite.ru(com,net и т.д.) то тоже пускать процесс дальше, а вот если пришёл домен moysite.рф или мойсайт.ru(com,net и т.д.) то выдавать ошибку что формат домена неверен. Направьте меня в нужное русло пожалуйста ))
Спустя 3 минуты, 34 секунды (3.06.2011 - 11:58) DedMorozzz написал(а):
Цитата |
((?:[a-z0-9-]{1,128}\.)+(?:com|net|". "org|mil|pro|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2}))|(?:[а-яё0-9-]{1,128}\.)+рф) |
как-то так
Думаю какой кусок на вот это догадаешься заменить
Спустя 10 минут, 31 секунда (3.06.2011 - 12:08) 5maks5 написал(а):
Извините, а на что это заменить? Я сейчас попробовал не получилось. Я в регулярках нуб нубом :)
Спустя 2 минуты (3.06.2011 - 12:10) DedMorozzz написал(а):
Было:
Цитата |
(?:[a-z0-9-]{1,128}\.)+(?:com|net|". "org|mil|pro|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2}) |
Стало
Цитата |
(?:(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|". "org|mil|pro|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2}))|((?:[а-яё0-9-]{1,128}\.)+рф)) |
Спустя 2 минуты, 37 секунд (3.06.2011 - 12:13) 5maks5 написал(а):
if (!preg_match("~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}".
"(?::[a-z0-9_-]{1,32})?@)?)?(?:((?:[a-z0-9-]{1,128}\.)+(?:com|net|".
"org|mil|pro|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2}))|(?:[а-яё0-9-]{1,128}\.)+рф)|(?!0)(?:(?".
"!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&".
"?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~i",$url))
echo "No";
else{echo "Yes";}
Вроде правильно заменил, но ошибка.
Спустя 46 секунд (3.06.2011 - 12:14) DedMorozzz написал(а):
отредактировал предыдущее сообщение, со скобками была проблема
Спустя 3 минуты, 5 секунд (3.06.2011 - 12:17) 5maks5 написал(а):
Я так и понял что где-то ошибка т.к. первый раз заменил и не получилось, тоже ошибка была и решил написать. Вдруг не то заменил.
Сейчас всё работает. Провёл тест всё работает как нужно. За что вам огромное человеческое спасибо!
Сейчас всё работает. Провёл тест всё работает как нужно. За что вам огромное человеческое спасибо!
Спустя 22 минуты, 48 секунд (3.06.2011 - 12:40) 5maks5 написал(а):
Снова проблема))
Если русский урл приходит гетом и пишется в $url то домен выходит вопросиками, а если английский то всё нормально.
$url = $_GET['url'];
Если русский урл приходит гетом и пишется в $url то домен выходит вопросиками, а если английский то всё нормально.
$url = $_GET['url'];
Спустя 1 час, 29 минут, 22 секунды (3.06.2011 - 14:09) DedMorozzz написал(а):
Кириллица в гете, это как баба на корабле.
Иль постом передавай иль енкод-декод делай
Иль постом передавай иль енкод-декод делай
Спустя 2 минуты, 20 секунд (3.06.2011 - 14:11) 5maks5 написал(а):
Хорошо. Спасибо.
_____________
Где исходники вселенной?