我正在尝试将一些编码文本转换为在网站上显示;具体的例子是将字符串“d83edd2a”转换为表情符号。
显然编码是UTF-16,但php将其检测为ASCII。
我尝试过使用hex2bin但是这会返回“Ø>Ý*”并且php将其检测为UTF-8,这对我来说很有意义。
我尝试过几次不同的尝试
$newCode = mb_convert_encoding($code, "ASCII", "UTF-16");
但是这会返回“????”
$newCode = iconv(mb_detect_encoding($code), 'ASCII', $hex);
但这也会返回“????”
我确信我错过了一些简单的事情,但我最终还是把自己绑起来了!
答案 0 :(得分:2)
如果我理解正确,您希望将字符串d83edd2a
转换为相应的表情符号。
最简单的方法就是:
echo hex2bin('d83edd2a');
但是,假设客户端使用UTF-16字符集。
如果客户端使用不同的字符集,则需要先将其转换,否则您只会看到垃圾。
但是你不能只使用任何编码(如ASCII),因为表情符号特定于unicode。
(ASCII根本不“知道”表情符号的概念。)
您需要使用UTF-8,UTF-16或UTF-32。
由于您提到的网站需要“UTF-8”,因此它是现代网站的事实上的标准字符集。
您可以将UTF-16转换为UTF-8,如下所示:
// First convert the string to binary data
// We know this is encoded in UTF-16
$UTF16Str = hex2bin('d83edd2a');
// Then we convert from UTF-16 to something more common like UTF-8
$UTF8Str = mb_convert_encoding($UTF16Str, 'UTF-8', 'UTF-16');
echo $UTF8Str;
作为最后一步,请确保将charset传递给客户端(您可以使用HTML或PHP执行此操作):
<meta charset="UTF-8"> <!-- inside <head> -->
或者在PHP中:
header('Content-Type: text/html; charset=UTF-8');