php实现escape
PHP 实现字符串转义的方法
在 PHP 中,字符串转义(escape)通常用于防止 SQL 注入、XSS 攻击或处理特殊字符。以下是几种常见的转义方法:
使用 htmlspecialchars() 转义 HTML 特殊字符
htmlspecialchars() 函数将特殊字符转换为 HTML 实体,防止 XSS 攻击。
$str = "<script>alert('xss')</script>";
$escaped = htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
echo $escaped; // 输出 <script>alert('xss')</script>
使用 addslashes() 转义 SQL 特殊字符
addslashes() 在需要插入数据库的字符串中添加反斜杠,转义单引号、双引号等。
$str = "O'Reilly";
$escaped = addslashes($str);
echo $escaped; // 输出 O\'Reilly
使用 PDO 预处理语句防止 SQL 注入
PDO 的预处理语句是更安全的 SQL 转义方式,无需手动转义。
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare("INSERT INTO users (name) VALUES (:name)");
$stmt->bindParam(':name', $name);
$name = "O'Reilly";
$stmt->execute();
使用 mysqli_real_escape_string() 转义 MySQL 字符串
适用于 MySQLi 扩展,需先建立数据库连接。
$conn = new mysqli("localhost", "user", "pass", "test");
$str = "O'Reilly";
$escaped = $conn->real_escape_string($str);
echo $escaped; // 输出 O\'Reilly
使用正则表达式转义特定字符
自定义转义规则时可用 preg_quote()。
$str = "file.*name?";
$escaped = preg_quote($str, '/');
echo $escaped; // 输出 file\.\*name\?
注意事项
- 对于 HTML 输出,优先使用
htmlspecialchars()。 - 对于 SQL 查询,优先使用预处理语句而非手动转义。
- 转义需根据上下文选择合适的方法,避免过度或不足转义。







