Вы немного не верно интерпретировали устаревание. Устарела не сама функция, а модификатор
/e
, который вы используете. В вашем примере, если я правильно понял, должно быть так:
$str = preg_replace_callback(
'/"((?:""|[^"])*?)"',
function ($m) {
return '\\"'.str_replace(';',' ',$m[1]).'\\"';
},
$data
);