2009-06-21 79 views
0

我有一個字符串,其中包含HTML & PHP,當我從數據庫中拉出字符串時,它被echo'd屏幕顯示,但PHP代碼不顯示。該字符串看起來是這樣的:如何eval()字符串的一段

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

輸出

Hello 

源代碼

Hello <?php echo 'World';?> 

當我看到在源代碼中,我可以看到PHP線那裏。所以我需要做的是eval()只是在字符串中的PHP段。

需要考慮的一件事是PHP可以在任何給定時間位於字符串中的任何位置。

*只是爲了澄清,我的PHP配置是正確的,這是一些PHP從數據庫中轉儲而不是渲染的情況,因爲我用PHP代碼在其中回顯變量,跑。 *

再次感謝我可能收到的任何幫助。

+0

你能看到輸出源中的php行嗎? – erenon 2009-06-21 22:41:21

+0

是的,正如我所提到的,PHP在源代碼中。 – Tisch 2009-06-21 22:45:23

+0

我清理了一下代碼,試圖說明問題更好一點... – Tisch 2009-06-21 22:48:33

回答

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

$matches = array(); 

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

eval($matches[1]); 

這將起作用,但像其他人一樣,並會建議,這是一個可怕的想法。你的應用程序架構不應該圍繞在數據庫中存儲代碼。

最簡單的是,如果您的頁面始終需要顯示字符串,請將這些字符串存儲在數據庫中,而不是用於生成它們的代碼。真實世界的數據比這更復雜,但必須始終在數據庫中正確建模。

編輯:需要使用preg_replace_callback來正確地移除源/插值。

0

你不應該評估php代碼,只是運行它。這需要安裝php解釋器,並正確配置apache + php。然後這個.php文件應該輸出Hello World。

答到編輯: 使用preg_replace_callback讓PHP的一部分,它的eval,更換輸入到輸出,然後回顯它。 但是。如果你應該評估來自數據庫的東西,我幾乎可以肯定,這是一個設計錯誤。

0

eval()應該工作正常,只要代碼是正確的PHP並以分號結尾。你如何去掉php標籤,然後評估它。

下面的例子是測試和工程:

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

只要確保無論你從數據庫中檢索已正確消毒第一,因爲你基本上允許任何人誰可以得到的內容進入數據庫,執行代碼。

相關問題