PHP преобразовать рф домен в punycode

Я немного плаваю в этих терминах, но все же попробуем разобраться.

Для начала попробуем разобраться в терминах

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
$IDN = new idna_convert();
$domain = 'домен.рф';
$input = $IDN->encode($domain);
echo $input;

На выходе мы получим punycode этого домена xn--d1acufc.xn--p1ai

Один очень важный момент, который никак нельзя упустить это кодировка. Домен, который мы кодируем в punycode обязательно должен быть в UTF-8, хотя в 2011 использовать не UTF-8 было бы мягко говоря неумно.

Если мы работаем с доменами, то можно даже без всякой проверки прогонять домены через этот енокд, потому что если домен не IDN, то он просто останется в том же самом виде, в котором и был, а если IDN, то он преобразуется в punycode.


 

 

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


  1. Валерий

    Так как преобразовать имя например Вася.рф в читабельный для pynicode??? Я чото так и не понял.

  2. Явекса

    Грамотный класс, простой главное и то что нужно, а то скрипт мой чего то не хочет кирилические домены обрабатывать, ерунда говорит этот ваш РФ :)

  3. Андрей

    Спасибо!
    Данный класс точно пригодится.