Problem in converting string to puny code (in PHP, using phlyLabs's punycode string converter)

旧巷老猫 提交于 2019-12-25 09:29:30

问题


i'm using the code from here: http://phlymail.com/en/downloads/idna/download/ and built a function like this (from the example):

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;
}

However it doesnt work properly.

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

What am I doing wrong? $inputstring which is being passed is a normal string with no special declarations/etc...


回答1:


Is your string already UTF-8? Looks like it. Or is it in ISO-8859-5? In both cases you cannot use the PHP function utf8_encode(), since it expects your input string to be ISO-88591-1 (ISO Latin-1, Western European languages). Look into the file transcode_wrapper.php, which is delivered with the class source. This might help you.




回答2:


you might need PHP IDNA Extension




回答3:


I'd just add something like to use if possible the module otherwise Dave suggested function :

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);}
}



回答4:


Try this method to convert encoding

//$inputstringutf8 = utf8_encode($inputstring);

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


来源:https://stackoverflow.com/questions/3132430/problem-in-converting-string-to-puny-code-in-php-using-phlylabss-punycode-str

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!