在 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 開啟時執行,避免不必要的效能損耗。php.ini 設定 magic_quotes_gpc = Off,從根源杜絕雙重轉義問題。PDO::prepare() 參數綁定或 mysqli_real_escape_string(),勿依賴 addslashes()。htmlspecialchars() 防範 XSS,切勿混淆資料庫轉義與輸出編碼。掌握轉義還原機制,能有效避免「反斜線疊加」導致的資料汙染與邏輯錯誤,是 PHP 開發者必備的基本功。