Привет, я использую preg_replace_callback
$data = "a:6:{s:4:"home";s:32:"Rue d'Alsace Lorraine, Toulouse";s:6:"school";s:30:"Avenue de Fronton, Saint-Alban";s:9:"last_name";s:5:"Devis";s:10:"first_name";s:4:"Test";s:5:"phone";s:10:"0611223344";s:12:"got-distance";s:1:"1";}";
$data = preg_replace_callback(
'!s:(\d+):"(.*?)";!se',
function($matches) { return "'s:'.strlen('$2').':\"$2\";'"; },
$data
);
но я функция возвращает null, потому что модификатор e не поддерживается, с этим может помочь кто-нибудь, я думаю, мне нужно изменить регулярное выражение, но я плохо разбираюсь в регулярных выражениях.
Цель этого - передать $ data для десериализации функции.
Разве это не просто сериализованное значение, которое может быть unserialized?
Я отредактировал код, теперь он готов, если вы можете использовать этот пример, и preg_replace_callback не возвращает null, поэтому я ищу
Да, цель этого - десериализовать его
В обратном вызове у вас есть массив $matches, это print_r(), посмотрите, что у вас там есть, и обработайте.
По какой странной причине у вас сериализованы данные неправильной длины?
Я сделал, но print_r ничего не печатает
Пожалуйста, возьмите пример, он завершен, preg_replace_callback не должен возвращать null
я думаю, что с preg_replace_callback вам не нужен модификатор e, и вы можете легко его удалить
Да, но он возвращает null, если я удалил модификатор e
Мне нужен обходной путь, чтобы это сработало
Его спрашивают то и дело, очень часто. Ответов много. На самом деле, просто поищите немного, и вы обнаружите, что вам нужно использовать переменную вместо заполнителей. preg_replace_callback('!s:(\d+):"(.*?)";!s', function($matches) { return 's:'.strlen($matches[2]).':"'. $matches[2] . '";'; }, $data); (поправьте замену, так как непонятно, что именно должно быть).






Укажите, что именно вы пытаетесь заархивировать с помощью своего кода.