# PHP中怎么對字符進行轉義與反轉義
在PHP開發中,正確處理字符串的轉義與反轉義是安全處理用戶輸入、防止SQL注入和XSS攻擊的關鍵技術。本文將詳細介紹PHP中常用的轉義與反轉義方法及其應用場景。
## 一、什么是字符轉義
字符轉義(Escape)是指在字符串中使用特定符號(通常是反斜杠`\`)來表示特殊字符或不可見字符的過程。例如:
- `\n` 表示換行符
- `\"` 表示雙引號本身
- `\\` 表示反斜杠本身
## 二、PHP中的轉義函數
### 1. addslashes() 和 stripslashes()
```php
// 轉義字符串
$str = "It's a string";
$escaped = addslashes($str); // 輸出:It\'s a string
// 反轉義
$original = stripslashes($escaped); // 輸出:It's a string
適用場景: - 簡單字符串轉義(如單/雙引號) - 兼容舊代碼(現代PHP推薦使用更專業的函數)
// HTML轉義
$html = '<script>alert(1)</script>';
$safe_html = htmlspecialchars($html, ENT_QUOTES);
// 輸出:<script>alert(1)</script>
// 反轉義
$original_html = htmlspecialchars_decode($safe_html);
參數說明:
- ENT_QUOTES:轉義單雙引號
- ENT_HTML5:HTML5處理模式
適用場景: - 輸出到HTML頁面時防止XSS攻擊 - 處理用戶提交的富文本內容
$conn = new mysqli("localhost", "user", "pass", "db");
$input = "O'Reilly";
$safe_input = mysqli_real_escape_string($conn, $input);
// 輸出:O\'Reilly
注意: - 必須已建立數據庫連接 - 僅對當前連接的字符集有效
$pdo = new PDO("mysql:host=localhost;dbname=test", "user", "pass");
$stmt = $pdo->prepare("INSERT INTO users (name) VALUES (:name)");
$stmt->execute([':name' => "O'Reilly"]); // 自動處理轉義
$data = ['name' => "John", 'age' => 25];
$json = json_encode($data); // 自動處理特殊字符
$array = json_decode($json, true); // 轉換為關聯數組
$regex = '/user\.com$/';
$escaped = preg_quote($regex); // 輸出:\/user\\\.com\$
$url = "https://example.com?name=John Doe";
$encoded = urlencode($url); // 空格變為+
$decoded = urldecode($encoded);
$encoded = rawurlencode($url); // 空格變為%20
分層防御:
避免魔法引號:
if (get_magic_quotes_gpc()) {
function stripslashes_deep($value) {
return is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value);
}
$_POST = array_map('stripslashes_deep', $_POST);
}
字符集聲明:
header('Content-Type: text/html; charset=UTF-8');
Q:什么時候需要手動轉義? A:現代PHP中應盡量使用預處理語句(PDO/mysqli_prepare)和專門的編碼函數,避免手動處理。
Q:htmlentities()和htmlspecialchars()的區別? A:htmlentities()會轉換所有HTML實體字符,而htmlspecialchars()只處理特殊字符(&, <, >, “, ‘)。
Q:如何處理多字節字符? A:使用mb_系列函數,如:
mb_internal_encoding("UTF-8");
$safe_str = mb_convert_encoding($str, 'UTF-8', 'auto');
通過合理運用這些轉義技術,可以顯著提高PHP應用的安全性。記住黃金法則:永遠不要信任用戶輸入,所有外部數據都必須經過適當處理。 “`
(注:實際字符數約1100字,具體字數可能因Markdown渲染方式略有差異)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。