PHP stripslashes()打破表情符号

时间:2018-09-08 22:43:28

标签: php json encoding

在我json_encodestripslashes我的数组之后,表情符号开始中断。

$msg = "Yeah Emojis are cool! ";

如果我回显$msg,它将按预期显示。呈现表情符号。

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

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

echo stripslashes(json_encode($postarray));

$postarray返回有效的JSON,但我的表情符号显示如下

ud83dudcb0ud83dudcb0ud83dudcb5

有解决方案吗?

2 个答案:

答案 0 :(得分:3)

使用stripslashes()破坏了您的数据。

有效JSON不应包含奇异的Unicode符号(表情符号即为Unicode符号),因此json_encode()会将其转换为转义的字符代码。 ""变成"\ud83d\udcb0",而"“变成"\ud83d\udcb5"

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

永远不要在JSON字符串上调用stripslashes()。使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

答案 1 :(得分:1)

尝试将选项“ JSON_UNESCAPED_UNICODE”添加到json_encode。

$msg = "Yeah Emojis are cool! ";
echo $msg;

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