PHP将utf-16转换为ascii

时间:2018-03-04 11:24:48

标签: php emoji

我正在尝试将一些编码文本转换为在网站上显示;具体的例子是将字符串“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);

但这也会返回“????”

我确信我错过了一些简单的事情,但我最终还是把自己绑起来了!

1 个答案:

答案 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');