Я сохранил содержимое своей страницы в базе данных и хотел бы выполнить любой PHP-код в строке. Итак, если моя строка была:
<h1>Welcome</h1><?php echo $motto?><br/>
Я только хочу выполнить echo $motto
. Использование eval () попытается выполнить <h1>Welcome</h1>
.
Любой способ сделать это?
Излишне говорить, что вы должны найти другое решение как можно скорее. Тем временем вы можете оценить код следующим образом:
$str = '<h1>Welcome</h1><?php echo $motto?><br/>'; // Your DB content eval("?> $str <?php ");
Демо: http://codepad.org/ao2PPHN7
Я не могу подчеркнуть, что достаточно: eval опасен, а код приложения не должен находиться в базе данных. Попробуйте парсер партитуры , такой как Smarty , Dwoo или мой любимый: 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
Для эхо-строки с использованием переменной внутри:
echo "<h1>Welcome</h1>$motto<br/>"
Или даже:
echo sprintf('<h1>Welcome</h1>%s<br/>', $motto)
Вот демонстрация http://codepad.org/f6aALD6w