我需要将U + 0123(拉丁文小写字母G和Cedilla)等字符转换为适当的UTF8十六进制编码字节,如0xC4 0xA3(或c4a3)。我知道有一个函数(或函数的组合)我可以用来在PHP中完成这个,但我似乎无法正确使用它。
答案 0 :(得分:1)
the answer you are linking to中的函数可以正常工作,但您必须考虑一些事项:
0x0123
)而不是字符串('U+0123'
)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;
}
}