как оценить () сегмент строки - PullRequest
0 голосов
/ 22 июня 2009

У меня есть строка с HTML и PHP, когда я извлекаю строку из базы данных, она выводится на экран, но код PHP не отображается. Строка выглядит так:

   $string = 'Hello <?php echo 'World';?>';
   echo $string;

выход

   Hello

Исходный код

   Hello <?php echo 'World';?>

Когда я смотрю в исходном коде, я вижу там строку php. Итак, что мне нужно сделать, это eval () только сегмент php, который находится в строке.

Следует учитывать, что PHP может быть расположен в любом месте строки в любой момент времени.

* Просто чтобы уточнить, моя конфигурация PHP верна, это случай, когда какой-то PHP выгружается из базы данных, а не рендеринг, потому что я эхо-переменную с кодом PHP в ней, это не удается бежать. *

Еще раз спасибо за любую помощь, которую я могу получить.

Ответы [ 3 ]

4 голосов
/ 22 июня 2009
$str = "Hello
<?php echo 'World';?>";

$matches = array();

preg_match('/<\?php (.+) \?>/x', $str, $matches);

eval($matches[1]);

Это сработает, но, как и другие, предлагают и предлагают, это ужасная идея. Архитектура вашего приложения никогда не должна вращаться вокруг хранения кода в базе данных.

Проще говоря, если у вас есть страницы, которые всегда должны отображать строки, сохраните эти строки в базе данных, а не код для их создания. Данные реального мира более сложны, чем это, но всегда должны быть должным образом смоделированы в базе данных.

Редактировать: для корректного удаления источника / интерполяции потребуется адаптация с preg_replace_callback.

0 голосов
/ 22 июня 2009

eval () должен работать нормально, если код соответствует PHP и заканчивается точкой с запятой. Как насчет того, чтобы сначала убрать тег php, а затем проверить его?

Следующий пример был протестирован и работает:

<?php
$db_result = "<?php echo 'World';?>";
$stripped_code = str_replace('?>', '', str_replace('<?php', '', $db_result));
eval($stripped_code);
?>

Просто убедитесь, что все, что вы извлекаете из базы данных, сначала было должным образом очищено, поскольку вы, по сути, позволяете любому, кто может получить содержимое в базу данных, выполнять код.

0 голосов
/ 22 июня 2009

Вы не должны проверять php-код, просто запустите его. Необходимо установить интерпретатор php и правильно настроить apache + php. Затем этот файл .php должен вывести Hello World.

Ответ на редактирование: Используйте preg_replace_callback, чтобы получить часть php, проверить ее, заменить ввод на вывод, а затем повторить его. Но. Если вы хотите что-то получить из базы данных, я почти уверен, что это ошибка проектирования.

...