代码之家  ›  专栏  ›  技术社区  ›  user2993497

PHP stripslashes()分解表情符号

  •  -1
  • user2993497  · 技术社区  · 8 年前

    在我死后情绪都崩溃了 json_encode stripslashes 我的阵法。

    $msg = "Yeah Emojis are cool! 💰💰💵";

    如果我回音 $msg

    但是在下面的代码之后。。。

    $postarray = array("name" => "Adam", "message" => $msg);
    
    echo stripslashes(json_encode($postarray));
    

    $postarray 返回一个有效的JSON,但是我的emojis是这样显示的

    ud83dudcb0ud83dudcb0ud83dudcb5

    有什么解决办法吗?

    2 回复  |  直到 8 年前
        1
  •  3
  •   rickdenhaan    8 年前

    使用 stripslashes()

    有效的JSON不应该包含异国情调的Unicode符号(Emojis就是这样),所以 json_encode() 将它们转换为转义字符代码。 "💰" 变成 "\ud83d\udcb0" "💵 "\ud83d\udcb5" .

    Stripslashes删除了表示您正在处理Unicode字符的反斜杠,因此接收应用程序无法知道这些字符代码需要转换回Emojis。

    条纹斜杠() 在JSON字符串上。使JSON失效的风险太大了。例如,如果您的数据包含一个带有文本的字符串 " 字符,它将作为 \" 把它剥掉 \ 关闭将使JSON无效:

    $data = ['value' => 'My "awesome" value'];
    $json = json_encode($data);
    // {"value":"My \"awesome\" value"}
    
    $stripped = stripslashes($json);
    // {"value":"My "awesome" value"}
    //               ^ Syntax error right here
    
        2
  •  1
  •   EvE    8 年前

    尝试将选项“JSON\u UNESCAPED\u UNICODE”添加到JSON\u encode。

    $msg = "Yeah Emojis are cool! 💰💰💵";
    echo $msg;
    
    $postarray = array("name" => "Adam", "message" => $msg);
    echo stripslashes(json_encode($postarray, JSON_UNESCAPED_UNICODE));