PHP变量循环(遍历)打印unicode字符

首先,我们得先提一个PHP语法:\u{}。比如:

[znl.pub ~ ]# php -r 'echo "\u{2440}".PHP_EOL;'
⑀

注意是我们是用的双引号,如果你用单引号,就不会转义而是直接输出 \u{2440};还有要注意就是花括号里的数是16进制数。接下来我就想:能不能设置一个16进制数的变量,让他自增加1,然后循环打印对应的unicode字符呢?那我们先来测试一下变量能不能组合后解析吧:

[znl.pub ~]# php -a 
php > // 定义初始十六进制数
php > $a = "2440";

php > // 使用 \u{} 语法输出 Unicode 字符
php > echo "\u{$a}".PHP_EOL;
PHP Warning:  Undefined variable $a in php shell code on line 1

php > echo "\u{{$a}}".PHP_EOL;
PHP Parse error:  Invalid UTF-8 codepoint escape sequence in php shell code on line 1

php > echo "\u{" . $a . "}" . PHP_EOL;
PHP Parse error:  Invalid UTF-8 codepoint escape sequence in php shell code on line 1

php > // 先设置成一个变量再试试?
php > $b="\u{".$a."}";
PHP Parse error:  Invalid UTF-8 codepoint escape sequence in php shell code on line 1

php > $b="\u{".$a;
PHP Parse error:  Invalid UTF-8 codepoint escape sequence in php shell code on line 1

php > $b="\u"."{".$a."}"; //这次没报错,抓紧echo 试试
php > echo $b;
\u{2440}  // 显然又失败了

哎,难道就没有什么办法了吗?其实不然,php还有个杀手锏函数json_decode(),哈哈,毕竟他能将 \uXXXX 这种写法的unicode解码啊:

//紧接上段
php > echo json_decode('"\u2440"');
⑀
php > echo json_decode('"\u'.$a.'"'); 
⑀  // 成了

下面给出完整遍历可用代码:

<?php

// 定义初始十六进制数
$a = "2440";

// 循环次数
$maxIterations = 10000;

// 循环加1并打印结果
for ($i = 1; $i < $maxIterations; $i++) {
    // 将十六进制数转换为十进制数
    $b = hexdec($a);

    // 加1
    $b++;

    // 将新的十进制数转换回十六进制数
    $a = dechex($b);

    // 输出 Unicode 字符
    echo json_decode('"\u' . sprintf('%04s', $a) . '"') . PHP_EOL;
}

?>

说明:

  1. sprintf('%04s', $a): 确保十六进制数字始终是四位,不足的用零填充。
  2. json_decode: 解析 Unicode 字符串,确保正确输出。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注