PHP serialize – метод превращения данных (строки, массива) в байт строку с возможностью последующего извлечения через unserialize. Ранее был популярен, но сейчас лучше использовать json:
- serialize работает только в php
- serialize из коробки имеет проблемы со спец. символами (пример ниже)
Ошибка “Notice: unserialize(): Error at offset 454707 of 455688 bytes in”
Варианты решения:
- переделать на json – самый простой и эффективный на практике
- использовать DECOCE – учитываем, что не работает с array
- использовать REGEXP для удаления “плохих” символов массово – можно потерять часть данных
- искать символ(ы) по значению байта (455688) на которые ругается serialize через dd, sql в базу и прочие шаманства и удалять их направленно
json – по сути аналог serialize, только более стандартизирован и стабилен.
Пример передачи и приема массива между страницами:
- кодируем данные (htmlspecialchars нужен если передаем массив)
echo "<form method=\"post\">"; $devices_encoded = htmlspecialchars(json_encode($devices)); echo "<input type=\"hidden\" name=\"devices\" value=\"$devices_encoded\"/>"; echo "</form>";
2. принимаем на второй стороне
$devices = json_decode($_POST['devices']);
Ассоциированный массив передать так просто не получится (или даже если ключи в массиве непоследовательны) – в результате json_encode будет создан object, не array. Удалить текущие ключи и сделать последовательно можно используя array_values() перед json encode.
Чтобы получить на выходе json_decode не object, а array, нужно добавить true во второй аргумент функции.
json_decode($res, true);