我在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
答案 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));
输出: