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()。该函数主要适用于遗留系统维护或特定场景下的简单转义需求。对于新项目,建议使用更安全的替代方案。

相关推荐
darkb1rd12 小时前
四、PHP文件包含漏洞深度解析
网络·安全·php
毕设源码-邱学长15 小时前
【开题答辩全过程】以 基于PHP的发热病人管理平台的设计与实现为例,包含答辩的问题和答案
开发语言·php
catchadmin17 小时前
2026 年 PHP 前后端分离后台管理系统推荐 企业级方案
开发语言·php
小李独爱秋17 小时前
计算机网络经典问题透视:蜂窝网络切换如何“扼杀”你的TCP连接?
网络·网络协议·tcp/ip·计算机网络·php·信息与通信
Data_Journal18 小时前
如何使用 Python 解析 JSON 数据
大数据·开发语言·前端·数据库·人工智能·php
serve the people18 小时前
python环境搭建 (十三) tenacity重试库
服务器·python·php
darkb1rd18 小时前
五、PHP类型转换与类型安全
android·安全·php
虚构之人1 天前
二进制漏洞挖掘(WinAFL Fuzzing)Windows篇
汇编·网络安全·信息安全·系统安全
迎仔1 天前
04-网络安全基础:数字世界的防盗门与守卫
网络·安全·web安全
毕设源码-钟学长1 天前
【开题答辩全过程】以 基于PHP的动漫社区的设计与实现为例,包含答辩的问题和答案
开发语言·php