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

PHP 中 stripslashes() 與 addslashes() 的實戰用法詳解

     編輯:PHP 相關知識

前言

在 PHP 開發中,資料的轉義與還原是資安防護的基礎環節。早期 PHP 預設開啟 magic_quotes_gpc,會自動對 GET、POST、COOKIE 資料進行 addslashes() 轉義。但此特性已於 PHP 5.4 移除,現代開發需手動控制轉義邏輯。本文將示範如何檢測 magic_quotes_gpc 狀態,並以遞迴方式徹底還原被轉義的資料。

核心程式碼實作

以下程式碼可置於專案的通用引入檔(如 common.php)最前端,確保所有超全域變數在進入業務邏輯前均為原始狀態:

<?php
if (get_magic_quotes_gpc()) {
    function stripslashes_deep($value) {
        $value = is_array($value)
            ? array_map('stripslashes_deep', $value)
            : (isset($value) ? stripslashes($value) : null);
        return $value;
    }

    $_POST    = stripslashes_deep($_POST);
    $_GET     = stripslashes_deep($_GET);
    $_COOKIE  = stripslashes_deep($_COOKIE);
    $_REQUEST = stripslashes_deep($_REQUEST);
}
?>

關鍵點解析

  • 遞迴處理:array_map 搭配自訂函式 stripslashes_deep,可深度遍歷多維陣列,確保巢狀資料皆被正確還原。
  • 型別判斷:is_array 區分陣列與純量值,純量值才執行 stripslashes(),避免對非字串型別造成誤傷。
  • 效能考量:僅在 magic_quotes_gpc 開啟時執行,避免不必要的效能損耗。

最佳實務建議

  1. 新專案請直接在 php.ini 設定 magic_quotes_gpc = Off,從根源杜絕雙重轉義問題。
  2. 資料寫入資料庫前,請改用 PDO::prepare() 參數綁定或 mysqli_real_escape_string(),勿依賴 addslashes()。
  3. 輸出至 HTML 時,統一使用 htmlspecialchars() 防範 XSS,切勿混淆資料庫轉義與輸出編碼。

掌握轉義還原機制,能有效避免「反斜線疊加」導致的資料汙染與邏輯錯誤,是 PHP 開發者必備的基本功。

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