#php #mysql #json
#php #mysql #json
Вопрос:
У меня есть таблица MySQL под названием статьи для моего новостного сайта. Когда я попытался получить все данные из этой таблицы с помощью PHP, я могу передать все данные в формате JSON, но article_text
. Это то, что я сделал,
(Это только для теста)
$result = mysqli_query($dbc, "SELECT * FROM articles");
if(mysqli_num_rows($result) > 0){
while ($row = mysqli_fetch_assoc($result)) {
$arr = array("id"=>$row["article_id"],
"title"=>$row["title"],
"image"=>$row["image"],
"text"=>$row["article_text"]);
}
echo json_encode($arr);
}
Это ничего не возвращает. Итак, я удалил "text"=>$row["article_text"]
из массива, это сработало. Все данные возвращаются в виде массива JSON. Это проблема с типом данных или моя проблема с кодированием. Как я могу это решить?. Спасибо.
Комментарии:
1. Какова ценность article_text, которая вызывает у вас проблемы? Возможно, в нем есть символ или больше, что приводит к сбою кодировки json. Смотрите также php.net/manual/en/function.json-last-error.php
2. @systematical: Спасибо за комментарий. Это большой текст. Он содержит тело статьи. Я проверю эту ссылку.
3. json_last_error() показывает 5. Я понял это. Я думаю, что мой текст содержит искаженный символ. Спасибо
4. Там могут быть такие вещи, как цитаты или другие специальные символы. В качестве последнего средства вы можете использовать base64_encode в php, а затем декодировать его в конце javascript. В зависимости от того, сколько раз вам нужно это сделать, это может снизить производительность.
Ответ №1:
Смотрите параметры битовой маски для json_encode.
Ссылка: http://php.net/manual/en/function.json-encode.php
Эти параметры объясняются здесь: http://php.net/manual/en/json.constants.php
Вероятно, вы ищете что-то вроде JSON_HEX_QUOT, но поиграйте с ними. Пример:
$string = json_encode($array, JSON_HEX_QUOT);
Удачи.
Ответ №2:
Просто добавьте параметры UTF8
битовой маски к вашему json_encode
, и это должно решить проблему. Вот так:
echo json_encode($arr, JSON_INVALID_UTF8_IGNORE | JSON_INVALID_UTF8_SUBSTITUTE);
Вчера я столкнулся с той же проблемой и искал ее по всему Интернету, чтобы решить, когда я наткнулся на кого-то с подобной проблемой, который сказал, что решил ее, добавив UTF8
набор символов чуть ниже своего запроса select, я попробовал, но ему было неясно, поделился ли он своим решением или как он это сделал. Поэтому, когда я увидел комментарий к этому вопросу, я использовал ссылки для ссылки на руководства по php по json ecode и увидел параметры UTF8
json_encode
битовой маски, я почувствовал, что это может быть решением, и оно сработало!
Вы также можете добавить дополнительные параметры битовой маски кодирования json для более чистого файла json. Нравится:
echo json_encode($arr, JSON_INVALID_UTF8_IGNORE | JSON_INVALID_UTF8_SUBSTITUTE | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
Надеюсь, это поможет любому, кто сталкивается с этой проблемой.