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

Dak*_*wal 1 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
Run Code Online (Sandbox Code Playgroud)

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

$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
Run Code Online (Sandbox Code Playgroud)

use*_*918 6

\u{1F600}是双引号字符串中使用的 Unicode 转义序列,它必须有一个文字值 - 正如您所见,尝试使用"\u{$value}"是行不通的(有几个原因,但这并不重要。)

如果您想开始"1F600"和结束,请使用hexdec将其转换为整数并将其输入以IntlChar::chr将该代码点编码为 UTF-8。例如:

$value = "1F600";
echo IntlChar::chr(hexdec($value));
Run Code Online (Sandbox Code Playgroud)

输出:


Run Code Online (Sandbox Code Playgroud)