問題描述

我對於 esc_html() 和 wp_kses() 的不同用法感到困惑。我明白,esc_html() 將特殊字符轉換為 HTML 實體,而 wp_kses() 會刪除不需要的標籤 (例如< script>),但我不知道應該在哪些上下文中使用或分開使用。

如果我通過 esc_html() 運行一些不受信任的 HTML,那麼任何 JavaScript 將以純文本形式顯示,而不是由瀏覽器呈現,所以在這一點上是安全的,是否正確?通過 wp_kses() 運行它的唯一原因是避免原始腳本顯示?

基本上, esc_html() 使它安全,並且 wp_kses() 使它漂亮。那是對的嗎?

最佳解決方案

一般規則,至少 as espoused by Mark Jaquith,在輸入上進行消毒,在輸出上轉義 (這個規則的必然結果早期消毒,逃避遲到) 。

因此,在數據庫中存儲不受信任的數據時使用消毒過濾器 (如 kses()系列),並在模板中輸出不受信任的數據時使用轉義過濾器 (即 esc_*()系列) 。

次佳解決方案

當您希望允許 html 的某個子集在結果中時,應使用 kses 函數。例如,註釋允許其中的一些 HTML 用於粗體,斜體,鏈接等。

應該使用 esc_html 函數完全轉出 html 。沒有 HTML 將不會被轉換成瀏覽器將被解釋為 non-HTML 的東西。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。