I have my page contents saved in a database and would like to execute any php code in the string. So if my string was:
<h1>Welcome</h1><?php echo $motto?><br/>
I only want to execute echo $motto
. Using eval() will try to execute <h1>Welcome</h1>
.
Any way to do this?
To echo string with a variable inside use:
echo "<h1>Welcome</h1>$motto<br/>"
Or even:
echo sprintf('<h1>Welcome</h1>%s<br/>', $motto)
Here is a demo http://codepad.org/f6aALD6w
Needless to say you should find another solution ASAP. In the meantime you can eval the code like this:
$str = '<h1>Welcome</h1><?php echo $motto?><br/>'; // Your DB content
eval("?> $str <?php ");
Demo: http://codepad.org/ao2PPHN7
I can't stress that enough: eval is dangerous, and application code shouldn't be in the database. Try a template parser like Smarty, Dwoo, or my favorite: Twig.
You really shouldn't do this, but if you absolutely have to, you can do it by using this class:
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);
}
}
Call it like this:
$p = new PhpStringParser();
echo $p->parse($string);
Source: http://www.php.net/manual/en/function.eval.php#108091
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With