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

PHP 特殊字元轉義處理:magic_quotes_gpc 與 addslashes 最佳實踐

     編輯:PHP 綜合知識

核心函數封裝

<?php
function check_form($form) {
    // 若 magic_quotes_gpc 關閉,手動轉義
    if (!get_magic_quotes_gpc()) {
        foreach ($form as $key => $val) {
            $form[$key] = addslashes($val);
        }
    }
    return $form;
}
?>

magic_quotes 相關設定詳解

設定項作用範圍建議值
magic_quotes_gpc請求開始時(GET/POST/COOKIE)Off(PHP 5.4+ 已移除)
magic_quotes_runtime運行期(檔案讀取、exec()、SQL 結果)Off
magic_quotes_sybase單引號轉義方式('' vs \')Off

為什麼應關閉 magic_quotes?

  • 可攜性: 開啟/關閉導致程式碼行為不一致
  • 效能: 所有輸入強制轉義,浪費資源
  • 困擾: 需配對 stripslashes() 還原,易漏處理
  • PHP 6/7 已移除: 官方認定為錯誤設計

現代最佳實踐

  1. php.ini 確保三項皆 Off
  2. 資料庫操作使用預處理語句(PDO/MySQLi),根本不需手動轉義
  3. 輸出到 HTML 時用 htmlspecialchars() 防 XSS
  4. 若必須相容舊環境,用統一輸入過濾器處理:
<?php
if (get_magic_quotes_gpc()) {
    $strip = function($v) {
        return is_array($v) ? array_map($strip, $v) : stripslashes($v);
    };
    $_GET = $strip($_GET);
    $_POST = $strip($_POST);
    $_COOKIE = $strip($_COOKIE);
    $_REQUEST = $strip($_REQUEST);
}
?>

補充:關閉錯誤顯示

error_reporting(0); // 生產環境建議配合 log_errors=On, error_log=路徑
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved