Sadece yedek değişebilir:
preg_replace("/(---\\\$_SESSION\\['(.+?)'\\]---)/", "\${\$_SESSION['\\2']}", $html)
ama ben bunu hiç tavsiye etmem. Her zaman olduğu gibi, eval
Eğer yanlış bir şey yaptığınızı büyük bir ipucudur.
$
1.html veya oturum değişkeni olmayan çiftleşmiş kullanımları hatalara neden olur. 1.html veya oturum değişkeni rasgele kod potansiyel sunucu ödün, ${...}
söz dizimi ile idam edilebilir. Cross-site scripting saldırıları yol, olduğu gibi-az-daha oturum değişkeni işaretleri veya 'işareti çıkış olacaktır.
Daha iyi bir strateji, sadece bir dize değil, bir PHP komut olarak dize tutmaktır. ---...---
bölümleri bulmak ve ayrı olanlar yerine:
$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);
(, Bu genellikle böyle değil test edilmiş, ancak doğru çizgiler boyunca olmalıdır Eğer gerçekten aktif HTML içerdiği için değişken istiyorsanız istiyoruz, htmlspecialchars
olmayabilir değil..)