Кодирование и декодирование кириллических (в зоне .РФ) доменов с помощью Punycode
Домены в зоне .РФ появились сравнительно недавно и уже успели превысить отметку в несколько сотен тысяч регистраций.
Домены в этой зоне предпочтительно относятся к России и пишутся исключительно на кириллице (на русском языке).
Признаюсь честно – я не сторонник этих доменов и русских названий страниц сайта в целом по многим причинам, но Интернет есть Интернет и ничего тут не поделаешь.
Сегодня я познакомлю вас с PHP-классом «Punycode». С помощью этого класса происходит конвертация Unicode-символов в ACE-последовательности. Нам эти все умные понятия не так важны, как важен тот факт, что при разработке своего модуля, например, какого-нибудь парсера, при указании ссылки типа:
http://это-мой-сайт.рф
мы можем не получить никакого результата. А вот если мы преобразуем этот домен в вид ACE, который, кстати говоря, выглядит так:
http://xn-----8kc8acomc3adj5j.xn--p1ai
то вполне получим работоспособный скрипт. Вообще, то, где это может вам потребоваться, вы определяете сами, я лишь предоставляю сам класс и инструкцию по работе с ним.
Кодирование кириллических доменов с помощью Punycode
1. Первым делом скачиваем класс в конце статьи и загружаем к себе на хостинг.
2. Далее подключаем его к вашему скрипту (в самый верх) таким образом:
require_once("idna_convert.class.php");
3. Осуществляем кодирование на примере вышеуказанного домена:
$domain = "это-мой-сайт.рф";
$converter = new idna_convert();
$encoded_domain = $converter->encode($domain);
echo $encoded_domain; // Вернет xn-----8kc8acomc3adj5j.xn--p1ai
Все просто.
Декодирование кириллических доменов с помощью Punycode
Если вам покажут домен вида:
xn-----8kc8acomc3adj5j.xn--p1ai
не думаю, что вы сразу сможете понять, что это за адрес на кириллице (пока не перейдете на него, конечно). Чтобы расшифровать обратно этот домен в читаемый вид, делаем следующее.
Первые два шага вы повторяете в точности из описания кодирования, а вот уже третий пункт будет выглядеть следующим образом:
$domain = "xn-----8kc8acomc3adj5j.xn--p1ai";
$converter = new idna_convert();
$decode_domain = $converter->decode($domain);
echo $decode_domain; // Вернет это-мой-сайт.рф
Это все, что вам нужно знать о классе Punycode. Если остались вопросы или возникли трудности – пишите, постараюсь помочь.