转换(双字节)字符串十六进制


Convert (doublebyte) string to Hex

假设我有一个用西里尔字母写的单词"Russian"。这在十六进制中相当于以下内容:

Русский

我的问题是:我如何写一个函数,将从"俄罗斯"在西里尔到它的十六进制值如上?同样的函数也可以为单字节字符工作吗?

这些〹的东西被称为HTML实体。在PHP中有一个函数可以创建这些:mb_encode_numericentity Docs,它是多字节字符串扩展(Demo)的一部分:

$cyrillic = 'русский';
$encoding = 'UTF-8';
$convmap = array(0, 0xffff, 0, 0xffff);
$encoded = mb_encode_numericentity($cyrillic, $convmap, $encoding);
echo $encoded; # русский

然而:你需要知道你的西里尔字符串的编码。在本例中,我选择了UTF-8,根据它,您需要修改函数的$encoding参数和$convmap数组。

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

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