Причина сбоя unserialize()
с:
$ser = 'a:2:{i:0;s:5:"héllö";i:1;s:5:"wörld";}';
Причина в том, что длина héllö
и wörld
неверна, поскольку PHP неправильно обрабатывает многобайтовые строки изначально:
echo strlen('héllö'); // 7
echo strlen('wörld'); // 6
Однако, если вы попытаетесь unserialize()
ввести следующую правильную строку:
<code>$ser = 'a:2:{i:0;s:7:"héllö";i:1;s:6:"wörld";}';
echo '<pre>';
print_r(unserialize($ser));
echo '
';
Работает:
Array
(
[0] => héllö
[1] => wörld
)
Если вы используете PHP serialize()
, он должен правильно вычислять длины многобайтовых строковых индексов.
С другой стороны, если вы хотите работать с сериализованными данными на нескольких языках программирования, вы должны забыть об этом и перейти к чему-то вроде JSON, который более стандартизирован.