我正在用 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)
\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)
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |