Я немного плаваю в этих терминах, но все же попробуем разобраться.
Для начала попробуем разобраться в терминах
IDN — это доменные имена, которые содержат символы национальных алфавитов
Punycode — стандартизированный метод преобразования последовательностей Unicode-символов в так называемые ACE-последовательности, которые состоят только из алфавитно-цифровых символов, как это разрешено в доменных именах. Punycode был разработан для однозначного преобразования доменных имен в последовательность ASCII-символов.
Что имеем:
РФ домен
Что нужно:
Преобразовать в punycode
Как будем делать:
На PHP
К счастью ничего супер сложного писать не придется, все что нам нужно сделать, это скачать уже готовый класс IDNA Convert с phpClasses.org
Далее, в нужном месте мы конвертируем домен в punycode:
1 2 3 4 5 | require_once('idna_convert.class.php'); //файл скачанный с phpclasses.org hpclasses.org $IDN = new idna_convert(); $domain = 'домен.рф'; $input = $IDN->encode($ |
На выходе мы получим punycode этого домена xn--d1acufc.xn--p1ai
Один очень важный момент, который никак нельзя упустить это кодировка. Домен, который мы кодируем в punycode обязательно должен быть в UTF-8, хотя в 2011 использовать не UTF-8 было бы мягко говоря неумно.
Если мы работаем с доменами, то можно даже без всякой проверки прогонять домены через этот енокд, потому что если домен не IDN, то он просто останется в том же самом виде, в котором и был, а если IDN, то он преобразуется в punycode.
Так как преобразовать имя например Вася.рф в читабельный для pynicode??? Я чото так и не понял.
Грамотный класс, простой главное и то что нужно, а то скрипт мой чего то не хочет кирилические домены обрабатывать, ерунда говорит этот ваш РФ 🙂
Спасибо!
Данный класс точно пригодится.
Спасибо! долго искал этот код!
Здравствуйте! Так все работает:
decode($domain);
echo $input;
?>
Вопрос как правильно записать в строку $domain значение, чтобы данные брались из адресной строки браузера??
Вариант не работает, хотя скорее всего тут еще и синтаксис не правильный (не владею PHP):
$domain = »;
Задача вывести в тексте punycode адрес домена русскими буквами (на сайте много зеркал, поэтому есть необходимость использовать $_SERVER[‘HTTP_HOST’])
Подскажите как правильно это оформить в коде??