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

PHP 字串轉義與還原:手動處理與內建函數完整指南

     編輯:PHP 綜合知識

字串在 SQL 查詢、HTML 輸出、JSON 序列化等場景常需轉義處理,PHP 提供手動與函數兩種機制,正確使用關係資料安全與輸出正確性。

1. 手動轉義與還原

<?php
// SQL 查詢中單引號轉義
echo 'select * from users where name=\'張三\'';
// 輸出:select * from users where name='張三'
?>

2. 內建函數處理

函數功能語法適用場景
addslashes()為預定義字符加反斜線string addslashes(string $str)通用字串轉義(單引號、雙引號、反斜線、NUL)
stripslashes()移除 addslashes() 加的反斜線string stripslashes(string $str)還原轉義字串

完整範例

<?php
$str = "select * from users where name='張三'";
echo $str . "<br />";           // 原始

$a = addslashes($str);
echo $a . "<br />";             // 轉義後:select * from users where name=\'張三\'

$b = stripslashes($a);
echo $b . "<br />";             // 還原:select * from users where name='張三'
?>

重要補充:資料庫專用轉義

  • MySQLi:$mysqli->real_escape_string($str) 或預處理語句(推薦)
  • PDO:預處理語句 $stmt = $pdo->prepare("SELECT * FROM users WHERE name = ?"); $stmt->execute([$name]);
  • PostgreSQL:pg_escape_string()

HTML 輸出轉義(防 XSS)

<?php
$input = "";
echo htmlspecialchars($input, ENT_QUOTES, 'UTF-8');
// 輸出:<script>alert('xss')</script>
?>

JSON 編碼自動處理

<?php
$data = ['name' => "O'Reilly", 'desc' => "Line1\nLine2"];
echo json_encode($data, JSON_UNESCAPED_UNICODE);
// {"name":"O'Reilly","desc":"Line1\nLine2"} 自動處理轉義
?>

最佳實踐原則

  1. 永遠使用預處理語句處理 SQL 參數,根治注入
  2. 輸出到 HTML 必經 htmlspecialchars()
  3. 區分存儲與輸出:存原始資料,輸出時按上下文轉義
  4. 避免手動拼接 SQL/HTML/JS:使用模板引擎、參數化查詢

轉義是上下文相關的操作,沒有通用的「萬能轉義」,必須針對目標上下文(SQL、HTML、JS、Shell、LDAP 等)選擇正確的轉義函數。

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