Domanda

Ho una stringa che ha HTML & amp; PHP in esso, quando estraggo la stringa dal database, viene ripetuto lo schermo, ma il codice PHP non viene visualizzato. La stringa è simile al seguente:

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

Output

   Hello

Codice sorgente

   Hello <?php echo 'World';?>

Quando guardo il codice sorgente, posso vedere la linea php lì. Quindi quello che devo fare è eval () solo il segmento php che si trova nella stringa.

Una cosa da considerare è che il PHP potrebbe trovarsi ovunque nella stringa in qualsiasi momento.

* Giusto per chiarire, la mia configurazione di PHP è corretta, questo è un caso in cui alcuni PHP vengono scaricati dal database e non vengono visualizzati, perché sto facendo eco a una variabile con il codice PHP in esso, non riesce correre. *

Grazie ancora per tutto l'aiuto che posso ricevere.

È stato utile?

Soluzione

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

$matches = array();

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

eval($matches[1]);

Funzionerà, ma come altri hanno e suggeriranno, questa è un'idea terribile. L'architettura dell'applicazione non dovrebbe mai ruotare attorno alla memorizzazione del codice nel database.

Più semplicemente, se hai pagine che devono sempre visualizzare stringhe, archivia quelle stringhe nel database, non il codice per produrle. I dati del mondo reale sono più complicati di così, ma devono sempre essere modellati correttamente nel database.

Modifica: sarebbe necessario adattarsi con preg_replace_callback per rimuovere l'origine / interpolare correttamente.

Altri suggerimenti

Non dovresti valutare il codice php, basta eseguirlo. È necessario che sia installato interprete php e che apache + php sia configurato correttamente. Quindi questo file .php dovrebbe generare Hello World.

Rispondi alla modifica: Usa preg_replace_callback per ottenere la parte php, valutarla, sostituire l'input nell'output, quindi riecheggiarlo. Ma. Se dovessi valutare le cose dal database, ne sono quasi sicuro, è un errore di progettazione.

eval () dovrebbe funzionare bene, purché il codice sia corretto PHP e termina con un punto e virgola. Che ne dici di rimuovere prima il tag php, quindi valutarlo.

Il seguente esempio è stato testato e funziona:

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

Assicurati solo che tutto ciò che recuperi dal db sia stato adeguatamente disinfettato per primo, poiché essenzialmente permetti a chiunque possa ottenere contenuti nel db di eseguire il codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top