这个问题已经在这里有一个答案:
- PHP的eval问题与PHP + HTML代码 5回答
我有我的网页内容保存在数据库中,并想在字符串中执行任意PHP代码。 所以,如果我的字符串是:
<h1>Welcome</h1><?php echo $motto?><br/>
我只是想执行echo $motto
。 使用eval()将试图执行<h1>Welcome</h1>
没有办法做到这一点?
这个问题已经在这里有一个答案:
我有我的网页内容保存在数据库中,并想在字符串中执行任意PHP代码。 所以,如果我的字符串是:
<h1>Welcome</h1><?php echo $motto?><br/>
我只是想执行echo $motto
。 使用eval()将试图执行<h1>Welcome</h1>
没有办法做到这一点?
不用说,你应该尽快找到另一种解决方案。 在此期间,你可以EVAL这样的代码:
$str = '<h1>Welcome</h1><?php echo $motto?><br/>'; // Your DB content
eval("?> $str <?php ");
演示: http://codepad.org/ao2PPHN7
我不能强调足够:EVAL是危险的,而应用程序代码不应该在数据库中。 尝试模板解析器像Smarty的 , Dwoo ,还是我最喜欢的: 枝杈 。
你真的不应该这样做,但是,如果你绝对要,你可以使用这个类做到这一点:
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
与内部使用的变量回声字符串:
echo "<h1>Welcome</h1>$motto<br/>"
甚至:
echo sprintf('<h1>Welcome</h1>%s<br/>', $motto)
这里是一个演示http://codepad.org/f6aALD6w