Проблема при преобразовании строки в puny-код (в PHP, используя преобразователь строк в punycode phlyLabs) - PullRequest
0 голосов
/ 28 июня 2010

Я использую код отсюда: http://phlymail.com/en/downloads/idna/download/ и построил функцию, подобную этой (из примера):

function convert_to_punycode($inputstring)
{
    $IDN = new idna_convert();
    // The input string, if input is not UTF-8 or UCS-4, it must be converted before
    $inputstringutf8 = utf8_encode($inputstring);
    // Encode it to its punycode presentation
    $outputstringpunycode = $IDN->encode($inputstringutf8);
    return $outputstringpunycode;
}

Однако она не работает должным образом.

For the input: Россию
It gives: РоÑÑиÑ
Whereas it should give: xn--h1alffa3f

Что я делаю не так?Передаваемая $ inputtring - это обычная строка без специальных объявлений / etc ...

Ответы [ 4 ]

3 голосов
/ 28 июня 2010

Ваша строка уже UTF-8? Похоже на то. Или это в ISO-8859-5? В обоих случаях вы не можете использовать функцию PHP utf8_encode (), поскольку она ожидает, что вашей входной строкой будет ISO-88591-1 (ISO Latin-1, западноевропейские языки). Посмотрите в файл transcode_wrapper.php, который поставляется с источником класса. Это может помочь вам.

0 голосов
/ 22 марта 2017

Попробуйте этот метод для преобразования кодировки

//$inputstringutf8 = utf8_encode($inputstring);

$inputstringutf8 = mb_convert_encoding($inputstring, 'utf-8', mb_detect_encoding($inputstring));
0 голосов
/ 10 мая 2015

Я бы просто добавил что-то вроде использования, если это возможно, модуля, иначе Дейв предложил функцию:

if(!function_exists('idn_to_ascii') and !function_exists('idn_to_utf8'))
{   define('IDN_FALLBACK_VERSION',2008);
    require_once('idna_convert.class.php');
    function idn_to_ascii($string)
    {   $IDN = new idna_convert(array('idn_version'=>IDN_FALLBACK_VERSION));
        return $IDN->encode($string);
    }
    function idn_to_utf8($string)
    {   $IDN = new idna_convert(array('idn_version'=>IDN_FALLBACK_VERSION));
        return $IDN->decode($string);
    }
    function idn_to_unicode($string){return idn_to_utf8($string);}
}
0 голосов
/ 28 июня 2010

Вам может понадобиться Расширение PHP IDNA

...