」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼即使禁用了魔術引號,PHP 中的 POST 資料也會自動轉義?

為什麼即使禁用了魔術引號,PHP 中的 POST 資料也會自動轉義?

發佈於2024-11-20
瀏覽:360

Why is POST Data Auto-Escaping in PHP Even When Magic Quotes are Disabled?

使用禁用的魔術引號揭開PHP 中神秘的自動轉義Post 數據

在PHP 中處理POST 數據時,特別是在PHP 中WordPress 環境中,儘管關閉了魔術引號,仍有可能遇到意外的自動轉義行為。當 POST 資料自動轉義時,就會出現這個令人費解的問題,儘管據說魔法引號已被禁用(get_magic_quotes_gpc() 返回 0)。

WordPress 的影響

深入研究後深入研究這個問題,很明顯 WordPress 在觸發這種自動轉義機制中發揮著至關重要的作用。當 WordPress 作為應用程式初始化過程的一部分進行引導時,其程式碼會幹擾 PHP 魔術引號的自然行為。

WordPress 包含攔截請求資料(包括 POST 資料)並執行某些操作的功能,其中之一正在轉義單引號 (')。即使在 php.ini 中禁用了魔術引號,這種行為也會延續。

Bug 的來源

對 WordPress 程式庫的仔細檢查發現了一個在下面報告的錯誤WordPress Core Trac 系統(票號 18322)。此問題與請求資料的錯誤處理有關,從而觸發了不必要的轉義。

解決方案

幸運的是,有一個解決方案可以解決這種自動轉義的困境。 WordPress Codex 建議在對 POST 資料執行任何操作之前使用 stripslashes_deep() 函數「取消轉義」POST 資料。透過使用此功能,您可以有效地覆蓋 WordPress 的自動轉義並以原始格式擷取資料。

要實作此解決方案,請將以下程式碼加入您的 PHP 腳本:

$_GET       = array_map('stripslashes_deep', $_GET);
$_POST      = array_map('stripslashes_deep', $_POST);
$_COOKIE    = array_map('stripslashes_deep', $_COOKIE);
$_SERVER    = array_map('stripslashes_deep', $_SERVER);
$_REQUEST   = array_map('stripslashes_deep', $_REQUEST);

此程式碼從所有超全域變數中刪除斜線,並確保在 PHP 中存取 POST 資料時不會自動轉義。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3