【问题标题】:PHP Unicode codepoint to characterPHP Unicode 代码点到字符
【发布时间】:2018-07-04 01:33:26
【问题描述】:

我想将 Unicode 代码点转换为字符。这是我尝试过的:

$point = dechex(127468);  // 1f1ec

echo "\u{1f1ec}";         // this works
echo "\u{$point}";        // this outputs '\u1f1ec'
echo "\u{{$point}}";      // Parse error: Invalid UTF-8 codepoint escape sequence
echo "\u\{{$point}\}";    // outputs \u\{1f1ec\}
echo "\u{". $point ."}";  // Parse error; same as above

【问题讨论】:

  • 嗯嗯。如果不可能的话,这似乎是一种迷失的情况:) 不过下面的答案是有道理的。

标签: php unicode


【解决方案1】:

您不需要将整数转换为十六进制字符串,而是使用IntlChar::chr

echo IntlChar::chr(127468);

直接来自IntlChar::chr的文档:

按码位值返回 Unicode 字符

【讨论】:

  • 酷豆。我必须把它加入书签,因为我确定我稍后会遇到这个并去“那又是什么???” :)
【解决方案2】:

当你想获得一个浮点数时,会出现类似的问题,比如12e-4,连接片段。解析在编译器中完成得太早而无法允许。但是,您可能可以使用eval() 来执行此操作。呸。

【讨论】:

    【解决方案3】:

    实际上几个小时后找到解决方案:

    $unicode = '1F605'; //?
    $uni = '{' . $unicode; // First bracket needs to be separated, otherwise you get '\u1F605'
    
    $str = "\u$uni}";
    
    eval("\$str = \"$str\";"); // Turns unicode into RegEx and store it as $str
    echo $str;
    

    感谢@Rick James 提供 eval() 函数的想法

    【讨论】:

      【解决方案4】:

      PHP 7+ 解决方案 sn-p:

      function charFromCodePoint($codepoint) {
          eval('$ch = "\u{'.dechex($codepoint).'}";');
          return $ch;
      }
      

      注意,PHP5 不支持“\u{}”语法。

      【讨论】:

        猜你喜欢
        • 2021-11-08
        • 2017-07-25
        • 2013-10-17
        • 2010-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-10
        相关资源
        最近更新 更多