#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. спасибо, это текстовое поле, поэтому должно быть более чем достаточно для определения количества хранимых данных.