Проблема при передаче длинного текста MySQL в формате JSON в PHP

#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);
  

Надеюсь, это поможет любому, кто сталкивается с этой проблемой.