【问题标题】:How do I convert Unicode escape sequences to text in PHP?如何在 PHP 中将 Unicode 转义序列转换为文本?
【发布时间】:2015-09-14 20:25:51
【问题描述】:

我有这个 Unicode 序列:\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059。怎么转成文字?

$unicode = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';

我试过了:

echo $utf8-decode(unicode);

我试过了:

echo mb_convert_encoding($unicode , 'US-ASCII', 'UTF-8');

我试过了:

echo htmlentities($unicode , ENT_COMPAT, "UTF-8");

但这些函数都没有将序列转换为相应的日文文本。

【问题讨论】:

    标签: php unicode unicode-escapes


    【解决方案1】:

    这里的问题是字符串是 not unicode。这是一个转义序列,用于通过 ASCII 字符记下 unicode(因此保存 7 位)。

    使用 phps json 解码器有一个简单的技巧:

    <?php
    $sequence = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';
    print_r(json_decode('["'.$sequence.'"]'));
    

    输出是:

    Array
    (
        [0] => おはようございます
    )
    

    这意味着你可以定义一个简单的便利函数:

    <?php
    $sequence = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';
    
    function decode($payload) {
      return array_pop(json_decode('["'.$payload.'"]'));
    }
    
    echo decode($sequence);
    

    您想在负载中添加错误处理和转义 json 特定控制字符。这个简单的例子只是为了给你指明正确的方向......

    玩得开心!

    【讨论】:

    • 这在输入字符串有双引号的情况下不起作用
    • @Oleg 答案中其实有提到想在解决方案中添加错误处理和转义...
    【解决方案2】:

    来自 intl 扩展的 Transliterator 类可以使用其predefined Hex-Any identifier 处理转换:

    $in = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';
    $out = transliterator_create('Hex-Any')->transliterate($in);
    var_dump($out); # string(27) "おはようございます"
    

    【讨论】:

    • 谢谢你,你是救生员。我在 Laravel 中转换字体,但 laravel 只给我 unicode 字体。你的方法对我有很大帮助。但它需要安装 php 扩展。
    【解决方案3】:

    PHP 7+

    从 PHP 7 开始,您可以使用 Unicode codepoint escape syntax 来执行此操作。

    echo "\u{304a}\u{306f}\u{3088}\u{3046}\u{3054}\u{3056}\u{3044}\u{307e}\u{3059}"; 输出おはようございます

    【讨论】:

      【解决方案4】:
      $unicode = '\u304a\u306f\u3088\u3046\u3054\u3056\u3044\u307e\u3059';
      $json = sprintf('"%s"',$unicode); # build json string
      
      $utf8_str = json_decode ( $json, true ); # json decode
      echo $utf8_str; # おはようございます
      

      Json string

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-29
        • 1970-01-01
        • 2020-04-25
        • 2020-07-09
        • 2020-03-15
        • 2015-05-04
        • 2010-11-02
        • 2010-09-16
        相关资源
        最近更新 更多