Php сериализовать/десериализовать количество символов новых строк (\n против \r\n)Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Php сериализовать/десериализовать количество символов новых строк (\n против \r\n)

Сообщение Anonymous »

Я столкнулся с проблемой, связанной с подсчетом символов при сериализации/

Код: Выделить всё

unserialize
.
Я должен сохранить этот массив в базе данных как сериализованную строку, а затем десериализовать его, когда это необходимо.

Код: Выделить всё

array(
'testVar' => "1st line
2nd line
3rd line"
)
Серийная строка:

Код: Выделить всё

a:1:{s:7:"testVar";s:28:"1st line
2nd line
3rd line";}
Как вы видите, каждая новая строка считается как два символа, например \r\n, вместо одного \n.
Если я установлю s:26, когда php его десериализует, выдаст эту ошибку:

Код: Выделить всё

Notice: unserialize(): Error at offset 51 of 56 bytes
Я заметил, что реальный подсчет символов выполняется по-другому, если:
  • я копирую и вставляю его в базу данных
  • Я использую веб-форму
  • Я использую графический интерфейс phpmyadmin
  • на разных платформах
Я также заметил, что вышеуказанная ошибка возникает и с этими шаги:
  • на локальном хосте, в текстовой области веб-формы я вставляю массив вручную (например, приведенный выше)
  • отправьте форму
  • скрипт php замените \r\n на \n, затем выведите сериализованную строку
  • которая строка теперь содержит правильное количество (в данном случае 26)
  • скопируйте и вставьте его в базу данных другой платформы (не на локальном хосте, например, с помощью phpmyadmin)
  • выполните десериализацию php на этой другой платформе
Кроме того, разные веб-сайты онлайн-сериализации дают разное количество символов.
Я немного не понимаю, как это должно работать...
Я немного не понимаю, как это должно работать...
p>
Мне нужно добавить сериализованный строки в базе данных вручную, а иногда и из веб-формы, так как я могу узнать, какой тип счетчика использовать в зависимости от платформы/машины?
Ps. наверняка есть другие лучшие альтернативы для массива, не являющегося объектом, например json_encode и/или base64, но я вынужден использовать сериализацию...

Подробнее здесь: https://stackoverflow.com/questions/782 ... t-n-vs-r-n
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»