首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

WordPress 常用轉義與過濾函數:esc_html、esc_url 深度解析

     編輯:PHP 綜合知識

一、esc_html() — 轉義 HTML 實體

echo esc_html('<a href="https://example.com">Link</a>');
// 輸出:&lt;a href="https://example.com"&gt;Link&lt;/a&gt;
// 瀏覽器顯示:Link
  • 將 < > & " ' 轉為 HTML 實體
  • 適用於:輸出到 HTML 文本節點、屬性值、JS 字串中
  • 不處理換行、空格等排版字符

二、esc_url() — 過濾與修正 URL

echo esc_url('www.example.com');           // https://www.example.com (補全協議)
echo esc_url('javascript:alert(1)');       // 空字串(拒絕危險協議)
echo esc_url('https://example.com/?a=1&b=2'); // 保留並實體化 & → &amp;
  • 預設允許協議:http, https, ftp, ftps, mailto, news, irc, gopher, nntp, feed, telnet
  • 可通過第二參數自定義允許協議陣列
  • 第三參數 $_context:'display' (預設,實體化) / 'attribute' (屬性用,雙重編碼) / 'db' (入庫存儲)

三、對比速查

函數用途典型場景輸出範例
esc_html文本節點/屬性用戶輸入顯示、標題、摘要&lt;script&gt;
esc_attrHTML 屬性值value="...", title="..."同 esc_html
esc_url鏈接 href/srca href, img src, form actionhttps://...
esc_jsJS 字串字面量onclick="...", var x = '...'轉義換行、引號、反斜線
esc_textareatextarea 內容編輯器初始值轉義實體

四、原則:輸出時轉義,入庫時驗證

  • 資料庫存「原始用戶輸入」(經 sanitize_* 驗證)
  • 模板輸出時根據上下文呼叫對應 esc_*
  • 永遠不要在入庫前 esc_html,否則重複編碼導致顯示錯誤

五、原始碼位置

wp-includes/formatting.php — 可閱讀實現細節(如 esc_url 內部用 wp_kses_bad_protocol 過濾協議)。

總結

esc_html 保護 XSS,esc_url 保護鏈接劫持。牢記「輸出時轉義、按上下文選函數」,WordPress 主題/插件安全性大幅提升。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved