2010-06-28 2 views
0

я использую код отсюда: http://phlymail.com/en/downloads/idna/download/ и построил такую ​​функцию (из примера):Проблемы в преобразовании строки в тщедушный код (в PHP, используя phlyLabs игровой Punycode струнного преобразователя)

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 

Что я делаю неправильно? $ inputstring, который проходит, является обычной строкой без специальных деклараций/etc ...

ответ

3

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

+0

Hi ! Спасибо! Это действительно так, и это решило проблему! Muchos gracias! – Dave

0

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

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

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

//$inputstringutf8 = utf8_encode($inputstring); 

$inputstringutf8 = mb_convert_encoding($inputstring, 'utf-8', mb_detect_encoding($inputstring)); 

 Смежные вопросы

  • Нет связанных вопросов^_^