将(doublebyte)字符串转换为Hex

时间:2011-08-10 17:01:21

标签: php utf-8 double-byte

假设我用西里尔语写的“俄语”这个词。这将是以下十六进制中的等价物:

Русский

我的问题是:如何编写一个函数,它将从西里尔语中的“俄语”变为上面的十六进制值?同样的功能也能用于单字节字符吗?

2 个答案:

答案 0 :(得分:5)

〹项称为HTML实体。在PHP中有一个函数可以创建它们:mb_encode_numericentityDocs,它是Multibyte String扩展名(Demo)的一部分:

$cyrillic = 'русский';

$encoding = 'UTF-8';
$convmap = array(0, 0xffff, 0, 0xffff);
$encoded = mb_encode_numericentity($cyrillic, $convmap, $encoding);

echo $encoded; # русский

但是:您需要知道西里尔字符串的编码。在这种情况下,我选择UTF-8,根据需要修改函数的$encoding参数和$convmap数组。

答案 1 :(得分:2)

您提供的示例不是十六进制,但如果您想转换为十六进制,请尝试以下操作:

function strToHex($string)
{
    $hex='';
    for ($i=0; $i < strlen($string); $i++)
    {
        $hex .= dechex(ord($string[$i]));
    }
    return $hex;
}

function hexToStr($hex)
{
    $string='';
    for ($i=0; $i < strlen($hex)-1; $i+=2)
    {
        $string .= chr(hexdec($hex[$i].$hex[$i+1]));
    }
    return $string;
}

echo strToHex('русский'); // d180d183d181d181d0bad0b8d0b9