在一个string中执行PHP代码

我有我的页面内容保存在数据库中,并希望执行string中的任何PHP代码。 所以如果我的string是:

<h1>Welcome</h1><?php echo $motto?><br/> 

我只想执行echo $motto 。 使用eval()将尝试执行<h1>Welcome</h1>

任何方式来做到这一点?

不用说,你应该尽快find另一个解决scheme。 在此期间,您可以像这样评估代码:

 $str = '<h1>Welcome</h1><?php echo $motto?><br/>'; // Your DB content eval("?> $str <?php "); 

演示: http : //codepad.org/ao2PPHN7

我不能强调:eval是危险的,应用程序代码不应该在数据库中。 尝试像Smarty , Dwoo或我最喜欢的模板parsing器: Twig 。

真的不应该这样做,但如果你绝对必须这样做,你可以使用这个类:

 class PhpStringParser { protected $variables; public function __construct($variables = array()) { $this->variables = $variables; } protected function eval_block($matches) { if( is_array($this->variables) && count($this->variables) ) { foreach($this->variables as $var_name => $var_value) { $$var_name = $var_value; } } $eval_end = ''; if( $matches[1] == '<?=' || $matches[1] == '<?php=' ) { if( $matches[2][count($matches[2]-1)] !== ';' ) { $eval_end = ';'; } } $return_block = ''; eval('$return_block = ' . $matches[2] . $eval_end); return $return_block; } public function parse($string) { return preg_replace_callback('/(\<\?=|\<\?php=|\<\?php)(.*?)\?\>/', array(&$this, 'eval_block'), $string); } } 

像这样调用它:

 $p = new PhpStringParser(); echo $p->parse($string); 

资料来源: http : //www.php.net/manual/en/function.eval.php#108091

要在内部使用variables来回显string:

 echo "<h1>Welcome</h1>$motto<br/>" 

甚至:

 echo sprintf('<h1>Welcome</h1>%s<br/>', $motto) 

这是一个演示http://codepad.org/f6aALD6w