假设我用西里尔字母写了单词“俄语”。这相当于十六进制中的以下内容:
Русский
我有一个问题:我应该如何编写一个函数,将“俄语”中的西里尔字母转换为其上面显示的十六进制值?这个函数是否也适用于单字节字符?
假设我用西里尔字母写了单词“俄语”。这相当于十六进制中的以下内容:
Русский
〹
这些东西被称为HTML实体。在PHP中,有一个函数可以创建这些实体:mb_encode_numericentity
文档,它是Multibyte String扩展的一部分(演示):
$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
htmlspecialchars()
吗? - Brad Christiehtmlentities()
函数,它可以转换大多数字符。 - knittlecho htmlentities('русский'); // 输出 руÑÑкий
- AlienWebguyhtmlentities
不会转换其中任何内容,请使用mb_encode_numericentity
。 - hakre