2012-02-05 98 views
3

我有以下問題。我通過命令行將一個長文本(變量類型LONGTEXT)放入MYSQL數據庫中。本文中的某處有一個<br>標籤,在文本結尾處有<?php phpinfo(); ?>。如果我輸入SELECT * FROM mytable WHERE id=1,這個整體的文本顯示,因爲它是,所以它是不變的(讀:既<br><?php phpinfo(); ?>在那裏但是,當我通過PHP提交的查詢是這樣的:初學者的好奇

if (mysql_num_rows($result) > 0) { 
    while($row = mysql_fetch_row($result)) { 
    echo $row[1]; 
    } 
} 

則正好顯示文本因爲我想在我的網頁上,這意味着<br>標記由瀏覽器作爲換行符處理,AND <?php phpinfo(); ?>部分是IGNORED。這實際上正是我想要的。但是我的問題是:爲什麼不通過瀏覽器處理<?php phpinfo(); ?>部分PHP的回聲函數是否忽略了<?php標籤?

在此先感謝解釋。

+0

這個問題似乎還不清楚。什麼是...你認爲它忽略了什麼?它顯示了什麼?等 – axiomer 2012-02-05 18:35:34

+1

一些代碼沒有顯示,現在它的固定 – TC99 2012-02-05 18:37:28

+0

如果瀏覽器會評估PHP代碼,我們都會被曝光。 – Shoe 2012-02-05 18:58:02

回答

3

因爲回顯字符串與評估它不一樣。

PHP生成HTML,然後由瀏覽器處理。然而,包含PHP代碼的字符串將不會被評估,除非您專門通過eval()(提示:不!)

+1

其他詳細信息:雖然'eval($ html);'會做你的期望,@ kolink正確地說你不應該這樣做,因爲它是一個主要的安全漏洞向量。可以安全地使用它,但如果可能的話應該避免。 – halfer 2012-02-05 19:14:08

+0

那麼安全eval()會是什麼樣的呢?上面的代碼實際上正是我想要的;我不想讓phpinfo()執行,我只是好奇它爲什麼會被忽略。但是既然你提到eval()可以安全使用,我也很好奇這個例子。 – TC99 2012-02-05 20:58:31

0

嘗試這種在一個新的空的瀏覽器窗口:

javascript:document.write('<b>hello <?php ?> is here!</b>'); 

然後打開螢火蟲/檢查。 在safari中,<?php ?>似乎被解釋爲/轉換爲註釋。

PHP迴應你拋出的任何東西。如果要執行長文本,請使用eval,如果要正確顯示它,則可以使用例如http://php.net/manual/en/function.htmlentities.php函數。

3

瀏覽器不處理PHP。這是一種服務器端技術。

您的PHP正在從數據庫中讀取一些文本並將其輸出到瀏覽器。該文本包含字符串<?php是不重要的,它是從PHP程序輸出的,不是腳本的一部分。

當瀏覽器解析它時,它看起來像無效的HTML,它試圖執行錯誤恢復(或多或少地忽略它作爲無法識別的標記)。