PHP json_encode выдает недопустимый JSON при хранении в MySQL

#php #json

#php #json

Вопрос:

Я уже немного погуглил это без радости. Я запускаю стандартный массив PHP через $encoded = json_encode($myArray);

Перед сохранением в базе данных MySQL. в 99% случаев это нормально, но в редких случаях закодированный JSON выглядит поврежденным….

 { "value": " }
  

хранится в базе данных. Это редкий случай, на самом деле я пока не могу воспроизвести его в своей локальной среде разработки, но разве вы не знаете, что пользователь может!!

Сохраняемые данные поступают из <textarea> формы, поэтому пользователь может вводить сомнительные символы, которые где-то что-то нарушают, дело в том, что я перепробовал все символы, о которых могу подумать, и даже ввел в него символы, отличные от UTF-8, и это никогда не приводит к вышеуказанному.

Я действительно изо всех сил пытаюсь разобраться в этом. Во-первых, я не вижу, как json_encode получается приведенный выше результат, возможно, выяснение этого помогло бы выяснить, что происходит, но я застрял.

Любой совет, помощь, указатель были бы замечательными,

Я ухожу, чтобы попытаться воспроизвести его.

Комментарии:

1. Попробуйте ввести огромное число в поле значения, скажем, 43900000034001299333 и посмотрите, не сработает ли это. Я столкнулся с аналогичными проблемами при кодировании больших целых чисел с помощью json (Facebook Ids). Чтобы обойти это, я использовал пользовательскую библиотеку Services_JSON.

2. Чтобы хранить большие числа в стандартной библиотеке, просто .. преобразуйте их в строки 🙂

3. черт, я надеялся, что это могла быть проблема с размером, но данные уже хранятся в строках. Я воспользовался этим и попытался сохранить строку монстра, и это тоже не дало сбоя. я подумал, что, возможно, это была странность с кодировкой кавычек «» ‘» вроде того, но я пробовал их, и они каждый раз соответствующим образом экранируются.

4. он выполняется через json_encode, а затем вставляется через стандартную вставку. Я обнаружил, что в другом месте есть проблема, которая, возможно, является ее причиной, но что мне все еще кажется, так это то, почему / как он хранит это, как указано выше, так что это по-прежнему важно для suss’а.

Ответ №1:

Убедитесь, что поле в вашей базе данных достаточно длинное. У меня возникла проблема, когда данные, закодированные в формате json, были длиннее длины поля и усекались, что делало их недействительными… Иногда, просто взглянув на закодированные данные, трудно заметить, что они обрезаны в конце. повторите его на своей php-странице и сравните с данными, которые заканчиваются в поле в базе данных…

Комментарии:

1. Это не отключается SQL. Вот и конец } .

2. спасибо, это текстовое поле, поэтому должно быть более чем достаточно для определения количества хранимых данных.