Сергей К.
1649 повідомлень
#14 років тому
Tkachenko, уже определил что проблема в переносах строк. Из за этого срывается и работа unserialize.
Сергей Д.
326 повідомлень
#14 років тому
Str_replace(
array("\r", "\n",
array('', '#',
$_POST
)
Игорь Ткаченко
65 повідомлень
#14 років тому
Цитата ("oren"):
Str_replace(
array("\r", "\n"),
array('', '#'),
$_POST
)

Верно, но потом в случае с \n\n\r будет ##, думаю должен быть один.
WebDesignStudio, или без разницы?
Сергей К.
1649 повідомлень
#14 років тому
oren, мне кажется не пойдет. Мне нужно между строками добавить. А так получится вместо всех \r \n по одному #. Хотя, можно это в массим загнуть через explode и поудалять пустые строчки. Думаю универсальный способ.
Сергей Д.
326 повідомлень
#14 років тому
Ну это-ж простейшие строковые функции, я думаю WebDesignStudio сам разберётся :-)
Удалить двойные \n preg_replace-ом, с помощью регулярки /{2,}/

И, возвращаясь, к первой проблеме, - переводы строк нормально обрабатываются: сериализуются, рассериализовываются...
Вадим Т.
3240 повідомлень
#14 років тому
Я не люблю использовать serialize/unserialize для сериализации массивов, слишком уж много недостатков, в том числе проблемы с переносами строк, с UTF-8, и т.д.

Вместо этого использую json_encode/json_decode, тем более что функция json_encode работает значительно быстрее чем serialize, и не говоря уже о том, что в случае с JSON сериализованные данные занимают меньше места.
Сергей К.
1649 повідомлень
#14 років тому
tvv, надо попробовать наверное. Но так я нашел один баг в своей системе. Неправильно делалась разбивка по строкам.
Сергей Д.
326 повідомлень
#14 років тому
Цитата ("tvv"):
тем более что функция json_encode работает значительно быстрее чем serialize

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

Цитата ("WebDesignStudio"):
Мне нужно между строками добавить

Ну так ничто не мешает заменять \n на "\n*\n"
Сергей К.
1649 повідомлень
#14 років тому
Вот, может кому еще пригодится:

function explode_lines($text){//функция разбивает текст на строки и возвращает результат в виде массива
$text = str_replace(array("\r", "\n"), array('', '#'), $text);
$list = explode("#", $text);
foreach($list as $k=>$v){
$v=trim($v);
if(empty($v))
unset($list);
}
return $list;
}
Вадим Т.
3240 повідомлень
#14 років тому
Цитата ("oren"):
Сам я это не проверял, но вот только что на хабре читал, что измеряли, и serialize получался всегда быстрее.

Можете ли дать ссылку на эту статью?

Вероятно, Вы смотрели эту:
Я угадал? Разбирался я с ней года 3 назад, даже отписался там в комментах...

Далее, мне знакомо несколько статей на хабре на данную тему, с разными способами измерения, то есть на разных наборах данных. В большинстве случаев JSON побеждает. Пожалуйста, смотрите:
Вадим Т.
3240 повідомлень
#14 років тому
Цитата ("WebDesignStudio"):
Вот, может кому еще пригодится:

Там ошибка.
Сергей К.
1649 повідомлень
#14 років тому
tvv, уже нет. Щас еще посмотрю если работает.
Вадим Т.
3240 повідомлень
#14 років тому
Цитата ("WebDesignStudio"):
tvv, уже нет. Щас еще посмотрю если работает.

Все еще да.
После for (...), видимо, не проставлены фигурные скобки, и только лишь $v=trim($v); выполняется в цикле... Это же PHP, а не Python...
Сергей К.
1649 повідомлень
#14 років тому
Упс. Просто трим был внутри empty. Вытащил и забыл. Щас.
Игорь Ткаченко
65 повідомлень
#14 років тому
Цитата ("tvv"):
json_encode работает значительно быстрее чем serialize

Судя по этой статье unserialize еще медленней чем json_decode
Вадим Т.
3240 повідомлень
#14 років тому
Цитата ("oren"):
Сам я это не проверял, но вот только что на хабре читал, что измеряли, и serialize получался всегда быстрее.

Вероятно, Вы имели в виду, что unserialize выполняется на несколько процентов быстрее. Это да, с этим никто не спорит. Но это не относится к функции serialize, которая работает быстрее только в редких случаях (на очень больших строках с латинскими буквами), а обычно существенно медленнее, иногда даже в разы медленнее.

В общем, попробуйте сами сделать замеры, мне например в свое время было интересно. Кстати, также интересно, как в последних версиях PHP с этим...
Вадим Т.
3240 повідомлень
#14 років тому
Цитата ("Tkachenko"):
Судя по этой статье unserialize еще медленней чем json_decode

Да ну, там в общем случае примерно сопоставимые цифры. На одних наборах данных unserialize немного быстрее, на других — json_decode немного быстрее. А пример в статье не особо часто распространенный (объемы данных большие), хотя знать об этом еще одном недостатке unsrialize необходимо.
А вот в случае serialize vs json_encode разница уже весьма существенна даже на относительно небольших наборах данных.
Артем Л.
11416 повідомлень
#14 років тому
Я тоже всегда в таких случаях использую json, очень удобно. А про serialize если честно вообще впервые сейчас узнал
Роман П.
1599 повідомлень
#14 років тому
oren, что, форум одни кавычки заменил, а другие оставил? У вас отличное мышление! Кстати, если вы заметили, проблема была именно с кавычками и экранированием.

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