Второй параметр preg_replace
всегда должен быть строкой.Использование флага /e
не меняет этого.И второй параметр просто должен быть строкой , состоящей из кода:
$strpost_a = preg_replace(
"/\[CallName]([^]]+)\[\/CallName\]/e",
'getInfo("\\1","fullname")',
$strpost_a
);
Строка 'getInfo("\\1","fullname")'
будет , затем будет оценена.Если вы не заключите его здесь в кавычки, он будет выполнен не preg_replace
, а заранее.Вот почему вы получили сообщение об ошибке.
(иногда лучше использовать preg_replace_callback
, но, скорее всего, в вашем случае потребуется конкретный getInfo_fullname
.)