【问题标题】:How to translate emoji unicode bytes string to appropriate UTF-8 in PHP如何在 PHP 中将表情符号 unicode 字节字符串转换为适当的 UTF-8
【发布时间】:2016-02-21 06:57:19
【问题描述】:

我有一个字符串,它是以下形式的 unicode 表示:'\ud83d\ude01'。我怎样才能把它翻译成它实际的 UTF-8 表示:'????'?

我已经尝试了以下代码:

$emoji = '\\ud83d\\ude01';

#Cleanup
$emoji = str_replace("\\u", "", $emoji);

#Split hex
$hex_bytes = str_split($emoji, 2);
$hex_bytes_numbers = array();

#Convert to actual numbers
foreach($hex_bytes as $hex)
    array_push($hex_bytes_numbers, hexdec($hex));


$clean_hex_string = implode(array_map("chr", $hex_bytes_numbers));

#Returns: Ø=Þ
echo $clean_hex_string . "\n";

#Returns : ?=?
echo utf8_decode($clean_hex_string);

【问题讨论】:

  • 只是出于好奇:那个字符串是从哪里来的? (换句话说,是什么导致您收到'\\ud83d\\ude01' 而不仅仅是'????'?)

标签: php string unicode utf-8 emoji


【解决方案1】:

\\ud83d\\ude01 看起来是 UTF-16 的转义形式。

转义和解码的代码非常简单:

$myInput = '\\ud83d\\ude01';

$myHexString = str_replace('\\u', '', $myInput);
$myBinString = hex2bin($myHexString);

print iconv("UTF-16BE", "UTF-8", $myBinString);

【讨论】:

    【解决方案2】:

    通过使用解决它:

    print json_encode('"$emoji"');
    

    发现这是最简单的方法。

    【讨论】:

    • 这对我不起作用。我得到"\"\\ud83d\\ude01\""你能提供更多你的代码吗?
    猜你喜欢
    • 1970-01-01
    • 2020-12-09
    • 2021-07-06
    • 1970-01-01
    • 2010-09-21
    • 2012-07-02
    • 2016-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多