在我json_encode
和stripslashes
我的数组之后,表情符号开始中断。
$msg = "Yeah Emojis are cool! ";
如果我回显$msg
,它将按预期显示。呈现表情符号。
但是在下面的代码之后...
$postarray = array("name" => "Adam", "message" => $msg);
echo stripslashes(json_encode($postarray));
$postarray
返回有效的JSON,但我的表情符号显示如下
ud83dudcb0ud83dudcb0ud83dudcb5
有解决方案吗?
答案 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));