PHP addslashes() 函数详解

目录

一、函数作用与基本语法

核心功能

转义规则

基本语法

二、典型应用场景

[1. 数据库查询准备(不推荐直接使用)](#1. 数据库查询准备(不推荐直接使用))

[2. 字符串安全处理](#2. 字符串安全处理)

[3. 配合 json_encode 使用](#3. 配合 json_encode 使用)

三、注意事项与限制

[1. 安全问题](#1. 安全问题)

[2. 字符编码问题](#2. 字符编码问题)

[3. 替代方案对比](#3. 替代方案对比)

四、实用示例与最佳实践

[1. 现代数据库操作(推荐方式)](#1. 现代数据库操作(推荐方式))

[3. 多层转义处理](#3. 多层转义处理)

[4. 与 stripslashes() 配合使用](#4. 与 stripslashes() 配合使用)


一、函数作用与基本语法

核心功能

addslashes() 是 PHP 中用于字符串转义的函数,主要功能是在特定字符前添加反斜线(\)进行转义,通常用于准备要存入数据库的字符串数据。

转义规则

  1. 单引号(')→ 转义为 '

  2. 双引号(")→ 转义为 "

  3. 反斜线(\)→ 转义为 \

  4. NULL 字符(\0)→ 转义为 \0

基本语法

php 复制代码
string addslashes ( string $str )

参数:$str - 要转义的字符串 返回值:返回转义后的字符串

二、典型应用场景

1. 数据库查询准备(不推荐直接使用)

php 复制代码
$name = "O'Reilly";
$safe_name = addslashes($name);
$sql = "INSERT INTO users (name) VALUES ('$safe_name')";
// 生成:INSERT INTO users (name) VALUES ('O\'Reilly')

2. 字符串安全处理

php 复制代码
$user_input = '"alert("XSS")"';
$safe_output = addslashes($user_input);
// 结果:\"alert(\"XSS\")\"

3. 配合 json_encode 使用

php 复制代码
$data = ["message" => "It's a \"test\""];
$json = addslashes(json_encode($data));
// 结果:{\"message\":\"It\'s a \\\"test\\\"\"}

三、注意事项与限制

1. 安全问题

  • 不适用于所有数据库:不同数据库系统有不同的转义要求

  • 不能防止SQL注入:应该使用预处理语句(PDO或mysqli)

  • 已被废弃的用法:不再需要用于 magic_quotes_gpc(PHP 5.4+已移除)

2. 字符编码问题

  • 仅处理ASCII字符,对多字节字符(如中文)可能产生问题

  • 建议先统一转换为UTF-8编码

3. 替代方案对比

场景 推荐方案 说明
数据库操作 PDO预处理 最安全的防注入方式
HTML输出 htmlspecialchars() 防止XSS攻击
JSON处理 json_encode() 自动处理转义

四、实用示例与最佳实践

1. 现代数据库操作(推荐方式)

php 复制代码
// 使用PDO预处理语句(不需要addslashes)
$pdo = new PDO($dsn, $user, $pass);
$stmt = $pdo->prepare("INSERT INTO table (column) VALUES (?)");
$stmt->execute([$unsafe_data]);

3. 多层转义处理

php 复制代码
$original = "It's a \"test\"";
$escaped = addslashes($original);  // 转义一次
$double_escaped = addslashes($escaped);  // 转义两次
​
echo $original;      // It's a "test"
echo $escaped;       // It\'s a \"test\"
echo $double_escaped; // It\\\'s a \\\"test\\\"

4. 与 stripslashes() 配合使用

php 复制代码
$data = "O'Reilly";
$escaped = addslashes($data);  // O\'Reilly
$original = stripslashes($escaped); // O'Reilly

备注 :在现代PHP开发中,应优先考虑使用预处理语句而不是addslashes()。该函数主要适用于遗留系统维护或特定场景下的简单转义需求。对于新项目,建议使用更安全的替代方案。

相关推荐
Andya_net5 小时前
网络安全 | 深入了解 X.509 证书及其应用
服务器·安全·web安全
Q_Q5110082859 小时前
python+uniapp基于微信小程序团购系统
spring boot·python·微信小程序·django·uni-app·node.js·php
网安INF11 小时前
Python核心数据结构与函数编程
数据结构·windows·python·网络安全
骥龙13 小时前
2.8、权限的终极目标:提权与持久化
安全·网络安全
catchadmin16 小时前
PHP8.5 的新 URI 扩展
开发语言·后端·php
G佳伟19 小时前
yii2添加新的modules完为什么访问的时候报错404
php
Andya_net20 小时前
网络安全 | SSL/TLS 证书文件格式详解:PEM、CRT、CER、DER、PKI、PKCS12
安全·web安全·ssl
jieyu11191 天前
uploads-labs靶场通关(1)
web安全·文件上传漏洞·靶场通关
亿坊电商1 天前
在PHP框架里如何进行数据库连接?
数据库·oracle·php
Q_Q5110082851 天前
python基于web的汽车班车车票管理系统/火车票预订系统/高铁预定系统 可在线选座
spring boot·python·django·flask·node.js·汽车·php