Вы можете просто изменить замену:
preg_replace("/(---\\\$_SESSION\\['(.+?)'\\]---)/", "\${\$_SESSION['\\2']}", $html)
, но я бы не стал вообще рекомендую. Как всегда, eval
- это большая подсказка, что вы делаете что-то неправильно.
Использование без шаблонов $
в 1.html или переменная сеанса вызовет ошибки. Произвольный код в 1.html или переменная сеанса может быть выполнен с помощью синтаксиса ${...}
, что потенциально может поставить под угрозу ваш сервер. Меньше, чем знаки или амперсанды в переменной сеанса будут выводиться как есть, что приводит к атакам межсайтового скриптинга.
Лучшей стратегией является сохранение строки как строки, а не команды PHP. Найти ---...---
секции и заменить их отдельно:
$parts= preg_split('/---(.+?)---/', $html, null, PREG_SPLIT_DELIM_CAPTURE);
for ($i= 1; $i<count($parts); $i+= 2) {
$part= trim($parts[$i]);
if (strpos($part, "\$_SESSION['")==0) {
$key= stripcslashes(substr($part, 11, -2));
$parts[$i]= htmlspecialchars($_SESSION[$key], ENT_QUOTES);
}
}
$html= implode('', $parts);
(Не тестировалось, но должно быть в правильном направлении Вы не можете htmlspecialchars
, если вы действительно хотите, чтобы ваши переменные содержат активный HTML, обычно это не так. .)
Ermmm ... не будет ли это плохая идея (TM) - вызов 'eval' на произвольные данные сеанса? –