使用PHP将Unicode十六进制值转换为字节

时间:2010-12-30 08:08:34

标签: php

我需要将U + 0123(拉丁文小写字母G和Cedilla)等字符转换为适当的UTF8十六进制编码字节,如0xC4 0xA3(或c4a3)。我知道有一个函数(或函数的组合)我可以用来在PHP中完成这个,但我似乎无法正确使用它。

1 个答案:

答案 0 :(得分:1)

the answer you are linking to中的函数可以正常工作,但您必须考虑一些事项:

  • 该函数需要一个数字(例如0x0123)而不是字符串('U+0123'
  • 您的输出必须显示为UTF-8
  • 可能需要致电mb_internal_encoding('UTF-8')(我发现某些系统的默认设置有误)

无论如何,我已经编写了一个接受Unicode代码点的小变体,以备正确的需要:

<?php

header('Content-Type: text/plain; charset=utf-8');

mb_internal_encoding('UTF-8');

function unicode_code_point_to_char($code_point) {
    if( preg_match('/^U\+(\d{4,6})$/', $code_point, $matches) ){
        return mb_convert_encoding('&#' . hexdec($matches[0]) . ';', 'UTF-8', 'HTML-ENTITIES');
    }else{
        return NULL;
    }
}

echo unicode_code_point_to_char('U+0123');

更新

我刚才注意到我误解了你的问题。试试这个:

function unicode_code_point_to_hex_string($code_point) {
    if( preg_match('/^U\+(\d{4,6})$/', $code_point, $matches) ){
        return bin2hex(mb_convert_encoding('&#' . hexdec($matches[0]) . ';', 'UTF-8', 'HTML-ENTITIES'));
    }else{
        return NULL;
    }
}