PHP полосы () разбивает эмодзи - PullRequest
0 голосов
/ 09 сентября 2018

Emojis ломаются после того, как я json_encode и stripslashes моего массива.

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

Если я получу эхо $msg, оно будет отображаться как положено. С оказанными смайликами.

Но после кода ниже ...

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

echo stripslashes(json_encode($postarray));

$postarray возвращает действительный JSON, но мои смайлики отображаются так

ud83dudcb0ud83dudcb0ud83dudcb5

Какие-нибудь решения?

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Использование stripslashes() разрушает ваши данные.

Допустимый JSON не должен содержать экзотических символов Unicode (которыми являются Emojis), поэтому json_encode() превращает их в экранированные коды символов. "?" становится "\ud83d\udcb0", а "? "становится "\ud83d\udcb5".

Stripslashes удаляет обратную косую черту, которая указывает на то, что вы имеете дело с символами Unicode, поэтому принимающее приложение не может знать, что эти коды символов необходимо вернуть в Emojis.

Вы никогда не должны вызывать stripslashes() в строке 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
0 голосов
/ 09 сентября 2018

Попробуйте добавить опцию '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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...