Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Здравствуйте. Подскажите пожалуйста, как можно провести проверку URL доменов, находящихся в зоне РФ?
Не в сети
Нашёл решение. Пишу, если кому-то понадобится.
Значит, я пытался проверить корректность введённого адреса сайта с помощью active_url. Но IDN (интернациональные доменные имена), а в частности домены в зоне ".рф" не проверялись. Решил проблему следующим образом:
Нашёл на GITHUB библиотеку, которая преобразует IDN. Вписал в composer.json следующую строку в раздел "require":
"mabrahamde/idna-converter": "dev-master"
Затем выполнил в консоли такую команду: composer update
А потом в классе, расширяющем стандартный Validator переопределил метод validateActiveUrl таким образом:
public function validateActiveUrl($attribute, $value){
# Конвертируем URL в ASCII
$idn = new idna_convert(['idn_version'=>2008]);
return
parent::validateActiveUrl( $attribute, $idn->encode($value) );
}
P.S. Класс, расширяющий Validator у меня лежит в папке app/extensions, которую я создал ранее.
Не в сети
библиотеку, которая преобразует IDN
Не в сети
Дмитрий пишет:библиотеку, которая преобразует IDN
Wide, спасибо. Только к сожалению не на всех хостингах установлено это дополнение PECL.
Не в сети
Правило active_url использует функцию checkdnsrr. Если нужно проверить только формат ссылки, используй правило url или regex.
Переопределять метод нет смысла, можно сразу передать обработанное значение.
Не в сети
Да, я знаю, что правило active_url использует функцию checkdnsrr. Поэтому именно её я и использовал.
У меня ссылка на сайт пишется в базу, поэтому, если предварительно преобразовать её, то в базу запишется преобразованный вариант, хотя конечно можно и дополнительную переменную создать для сохранения исходного значения.
Не в сети
"mabrahamde/idna-converter": "dev-master"
А дополнительно ничего нигде не надо прописывать?
$IDN = new idna_convert();
dd($IDN->encode('домен.рф'));
выдает
Class 'App\Http\Controllers\idna_convert' not found
Изменено anzim (09.11.2015 20:42:52)
Не в сети
получилось с etechnika/idna-convert
use Etechnika\IdnaConvert\IdnaConvert as IDNA;
IDNA::encodeString($url)
Не в сети
Страницы 1