#php
#php
Вопрос:
У меня есть скрипт, который создает массив, содержащий записи для таблицы, которую я хотел бы закодировать как json для отправки в мое приложение. Каждая запись представляет собой ассоциативный массив из k / v пар string=>string|int
. Код для генерации полного массива выглядит следующим образом:
$entries = [];
foreach($stats as $i => $stat){
$playerStats = new Player_Stats($stat);
$entry = [
'place' => $i,
'name' => $playerStats->name(),
'elo' => $playerStats->currentRating(),
'highest' => $playerStats->highRating(),
'masterPoints' => $playerStats->onlineMasterPoints(),
'winLose' => $playerStats->matchesWonLost(),
'winRate' => $playerStats->winPercent(),
'numEvents' => $playerStats->numEvents(),
'wins' => $playerStats->eventsWon(),
'placed' => $playerStats->eventsPlaced()
];
$entries[] = $entry;
}
$result = json_encode($entries);
Когда я выполняю подсчет или vardump и т. Д. Для записей, Это ясно показывает, что они были правильно заполнены правильными данными. json_encode()
однако возвращает false . Используя json_last_error_msg()
, я получаю ошибку UTF-8 в названии : Malformed UTF-8 characters, possibly incorrectly encoded
. Во всех других сообщениях по этому вопросу я мог найти задействованные символы из других языков. Все содержимое в этом массиве состоит из английского алфавита и цифр, все символы ascii, не говоря уже о utf-8.
Я просто упускаю что-то тривиальное (обычно я) или я должен искать или пробовать что-то совсем другое?
Комментарии:
1. можете ли вы предоставить нам полезную нагрузку, для которой вы получаете ошибку?
Ответ №1:
Вы можете использовать опцию, чтобы игнорировать их, JSON_INVALID_UTF8_IGNORE
поэтому ваш код будет json_encode($data, JSON_INVALID_UTF8_IGNORE);
Это будет игнорировать недопустимый UTF-8, как описано в названии. Вы можете увидеть все варианты json_encode
здесь. https://www.php.net/manual/en/function.json-encode.php
Комментарии:
1. Обычно я бы согласился, но в данном контексте я бы обсудил, что ошибка заключается в кодировке символов, вы можете использовать опцию игнорировать в json_encode, пока не найдете корень вашей проблемы.
2. Это предотвратило возникновение ошибок, но не устранило основную проблему. Я пошел и отследил единственное возникновение проблемы, и оказалось, что в данных есть пара нечетных символов, но все они являются символами Unicode, в данном конкретном случае это
ñ
Ответ №2:
Что-то вроде этого может помочь:
$result = json_encode(array_map(utf8_encode, $entries))