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

PHP addcslashes 與 stripcslashes:自訂字元轉義與還原實戰

     編輯:PHP 綜合知識

函式定義

string addcslashes(string $string, string $charlist)
string stripcslashes(string $string)
  • addcslashes:在 $charlist 指定的每個字元前加上反斜線 \。支援範圍寫法 'a..z'、'0..9'。
  • stripcslashes:移除 addcslashes 加入的反斜線,還原字串。
  • 不同於 addslashes(固定轉義 ' " \ NULL),addcslashes 可自訂目標字元集。

核心參數:charlist 寫法

注意:charlist 中的 ^、-、] 有特殊含義,需轉義或放在開頭/結尾。

實戰場景:SQL 字串安全插入

原文案例:MySQL TEXT 欄位插入含單引號內容失敗,解決方案:

$sql = "UPDATE book SET bookname='let's go' WHERE bookid=1";
// 單引號導致 SQL 語法錯誤

// 針對單引號轉義
$safeSql = addcslashes($sql, "'");
echo $safeSql;
// UPDATE book SET bookname=\'let\'s go\' WHERE bookid=1

// 執行後資料庫實際儲存:let's go

// 讀出時還原(若需)
$original = stripcslashes($safeSql);

addcslashes vs addslashes 差異

寫法含義範例
'A'單一字元addcslashes($str, 'A')
'A..Z'ASCII 範圍大寫字母全部轉義
'\0..\37'八進位碼範圍控制字元轉義
'\n\r\t'多個字元換行、回車、定位

進階用法:JavaScript 字串安全輸出

$jsVar = "alert('Hello \"World\"');";
// 需轉義單引號、雙引號、反斜線、換行
$safeJs = addcslashes($jsVar, "'\"\\\n\r");
/* 結果:
alert(\'Hello \"World\"\\');
可直接內嵌於 ";

常見錯誤

  1. 重複轉義:對已轉義字串再次呼叫 addcslashes 會產生 \\。務必確認輸入是否已處理。
  2. charlist 範圍寫錯:'a-z' 不會展開,必須寫 'a..z'(兩點)。
  3. 二進位資料損壞:stripcslashes 假設反斜線皆為轉義用途,若原始資料含有真實 \ 後接非轉義字元,可能誤刪。二進位協議建議用 bin2hex/base64 編碼。

現代替代方案

  • 資料庫操作 → 預備語句 (Prepared Statements),完全避免手動轉義。
  • HTML 輸出 → htmlspecialchars($str, ENT_QUOTES, 'UTF-8')。
  • JavaScript 內嵌 → json_encode($str)(自動處理所有需轉義字元,含 Unicode)。
  • Shell 指令 → escapeshellarg / escapeshellcmd。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
特性addslashesaddcslashes
轉義目標固定:' " \ NULL自訂 charlist
適用場景通用字串安全、資料庫舊版驅動特定字元集、二進位協議、自訂轉義規則
效能略快需解析 charlist
還原函式stripslashesstripcslashes