在PHP中使用动态Unicode创建UTF-8代码

时间:2017-07-29 10:44:43

标签: php unicode utf-8

我在PHP中制作动态Unicode图标。我想要Unicode图标的UTF-8代码。

到目前为止,我已经完成了:

$value = "1F600";
$emoIcon = "\u{$value}";

$emoIcon = preg_replace("/\\\\u([0-9A-F]{2,5})/i", "&#x$1;", $emoIcon);
echo $emoIcon; //output 
$hex=bin2hex($emoIcon);
echo $hex;  // output 26237831463630303b
$hexVal=chunk_split($hex,2,"\\x");
var_dump($hexVal);  // output  26\x23\x78\x31\x46\x36\x30\x30\x3b\x
$result= "\\x" . substr($hexVal,0,-2);
var_dump($result);    // output  \x26\x23\x78\x31\x46\x36\x30\x30\x3b

但是当我直接输入值时,它会输出正确的数据:

$emoIcon = "\u{1F600}";

$emoIcon = preg_replace("/\\\\u([0-9A-F]{2,5})/i", "&#x$1;", $emoIcon);
echo $emoIcon; //output 
$hex=bin2hex($emoIcon);
echo $hex;  // output f09f9880
$hexVal=chunk_split($hex,2,"\\x");
var_dump($hexVal);  // output  f0\x9f\x98\x80\x
$result= "\\x" . substr($hexVal,0,-2);
var_dump($result);    // output  \xf0\x9f\x98\x80

1 个答案:

答案 0 :(得分:1)

\u{1F600}double-quoted strings中使用的Unicode转义序列,它必须具有字面值 - 尝试使用"\u{$value}",如您所见,不起作用(对于几个原因,但这并不重要。)

如果您想从"1F600"开始,最后使用使用hexdec将其转换为整数,并将其提供给IntlChar::chr,以将该代码点编码为UTF-8。 E.g:

$value = "1F600";
echo IntlChar::chr(hexdec($value));

输出: