Pergunta

Eu tenho uma seqüência que tenha HTML e PHP nele, quando eu puxar a corda do banco de dados, é echo'd para a tela, mas o código PHP não será exibido. Os olhares de cordas como este:

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

saída

   Hello

Código Fonte

   Hello <?php echo 'World';?>

Quando eu olhar no código fonte, posso ver a linha php lá. Então, o que eu preciso fazer é eval) apenas o segmento (php que está na corda.

Uma coisa a considerar é que o PHP pode ser localizado em qualquer lugar na string em um dado momento.

* Só para esclarecer, meu PHP configuração estiver correta, este é um caso de algum PHP ser despejado do banco de dados e não renderização, porque estou echo'ing uma variável com o código PHP nele, ele falhar para correr. *

Obrigado novamente por qualquer ajuda que pode receber.

Foi útil?

Solução

$str = "Hello
<?php echo 'World';?>";

$matches = array();

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

eval($matches[1]);

Este trabalho vontade, mas como outros têm e irão sugerir, esta é uma péssima idéia. Sua arquitetura de aplicação nunca deve girar em torno de armazenamento de código no banco de dados.

A maioria simplesmente, se você tiver páginas que sempre precisam de cadeias de exibição, armazenar essas cordas no banco de dados, não o código para produzi-los. dados do mundo real é mais complicado do que isso, mas deve sempre ser devidamente modeladas no banco de dados.

Edit:. Precisaria adaptar com preg_replace_callback para remover a fonte / interpolate corretamente

Outras dicas

Você não deve eval o código php, basta executá-lo. É da necessidade de ser intérprete PHP instalado, e apache + php configurado corretamente. Então este .php deve saída Olá Mundo.

Resposta ao edit: Use preg_replace_callback para obter a parte php, eval-lo, substituir a entrada para a saída, então eco-lo. Mas. Se você deve eval coisas vêm de banco de dados, tenho quase certeza, é um erro de projeto.

eval () deve funcionar bem, contanto que o código é PHP adequada e termina com um ponto e vírgula. Que tal você retirar o tag php primeiro, então eval-lo.

O exemplo a seguir foi testado e funciona:

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

Apenas certifique-se que tudo o que você recuperar a partir do db foi devidamente higienizados em primeiro lugar, desde que você está permitindo essencialmente qualquer um que pode obter conteúdo para o db, para executar código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top