我有一个模板式系统,它可以加载批量模板(一个文件中的多个模板条目)并相应地存储它们。问题是当前的方法使用preg_replace()
andeval
并且它真的很容易出错。这个错误的一个例子可能是一个放置不正确的字符,它破坏了正则表达式并产生了一个解析错误:
Parse error: syntax error, unexpected '<' in tsys.php: eval()'d code
执行此操作的代码如下:
// Escaping
$this->_buffer = str_replace( array('\\', '\'', "\n"), array('\\\\', '\\\'', ''), $this->_buffer);
// Regular-expression chunk up the input string to evaluative code
$this->_buffer = preg_replace('#<!--- BEGIN (.*?) -->(.*?)<!--- END (.*?) -->#', "\n" . '$this->_tstack[\'\\1\'] = \'\\2\';', $this->_buffer);
// Run the previously created PHP code
eval($this->_buffer);
此批量模板的示例文件如下所示:
<!--- BEGIN foo -->
<p>Some HTML code</p>
<!--- END foo -->
<!--- BEGIN bar -->
<h1>Some other HTML code</h1>
<!--- END bar -->
在此输入上运行代码时,$this->_tstack
将给出两个元素:
array (
'foo' => "<p>Some HTML code</p>",
'bar' => "<h1>Some other HTML code</h1>",
);
这是预期的行为,但我正在寻找一种我们可以放弃eval
.