示例網頁有2個字段,並允許用戶輸入標題和代碼。這兩個字段稍後將嵌入並顯示在HTML頁面中供查看和/或編輯,但不能執行。換句話說,任何PHP或JavaScript或類似的應該不會運行,但顯示編輯和複製。在mysql數據庫中存儲原始php,javascript,html或類似的最佳實踐方法是什麼?
在這種情況下,什麼是逃避數據庫插入之前和之後這些領域的最佳方法(對於HTML顯示)
示例網頁有2個字段,並允許用戶輸入標題和代碼。這兩個字段稍後將嵌入並顯示在HTML頁面中供查看和/或編輯,但不能執行。換句話說,任何PHP或JavaScript或類似的應該不會運行,但顯示編輯和複製。在mysql數據庫中存儲原始php,javascript,html或類似的最佳實踐方法是什麼?
在這種情況下,什麼是逃避數據庫插入之前和之後這些領域的最佳方法(對於HTML顯示)
您需要使用的功能htmlspecialchars()
在PHP
,這將改變任何特殊字符(例如<
和>
)轉換爲其特殊的HTML編碼字符(例如<
和>
)。當你從數據庫中獲得這些信息並將它們輸出爲HTML時,它們將顯示爲代碼,但不會損害你的腳本或執行。
因此,您建議在數據庫插入之前轉義所有內容,然後將其顯示爲HTML? – Andres 2010-10-13 19:26:38
@Andres:他對編碼特殊字符的建議與轉義不同。順便說一句,我不建議編碼,因爲這會讓你處於可能進行雙重編碼的情況。沒有理由不能在沒有編碼的情況下插入數據。您可以隨時過濾和/或編碼。 – 2010-10-13 23:34:15
@wilmoore謝謝。我也考慮過編碼,但很快就意識到如果程序員在顯示數據之前忘記編碼就會出現潛在的問題。目前,在插入數據庫之前,我使用的是像mysql_real_escape_string(htmlspecialchars($ data))這樣的php,其中$ data是代碼。 – Andres 2010-10-15 15:07:43
我幾天前面臨同樣的問題,爲了把代碼(javascript或PHP)以非可執行的方式放在html中,我使用了textarea,它解決了這個問題。 然而,問題在於數據庫。我不能對數據使用典型的轉義函數,因爲它正在影響我的數據,例如標籤越來越混亂。 爲了解決這個問題,我在將數據放入數據庫之前,先將數據以base 64格式編碼。所以發生了什麼事情是我的JavaScript代碼被編碼,結果代碼不再是一個Javascript代碼,我可以使用這個轉義函數並將其存儲在數據庫中。
我願意提供建議,隨時發表評論。
例如,查看jslint,甚至是stackoverflow如何在代碼中存儲代碼。 – Andres 2010-10-13 18:41:02