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

相关推荐
蜂蜜黄油呀土豆9 分钟前
计算机网络中的常见网络场景与问题排查
tcp/ip·计算机网络·网络安全·http请求与响应
IT=>小脑虎1 小时前
PHP零基础衔接进阶知识点【详解版】
开发语言·学习·php
德迅云安全-小潘1 小时前
H5安全风险与防护策略:构建可信的移动互联网服务
web安全
xifangge20252 小时前
PHP 接口跨域调试完整解决方案附源码(从 0 到定位问题)
开发语言·php
ICT董老师2 小时前
通过kubernetes部署nginx + php网站环境
运维·nginx·云原生·容器·kubernetes·php
bleach-3 小时前
buuctf系列解题思路祥讲--[SUCTF 2019]CheckIn1--文件上传以及user.ini的应用
nginx·web安全·网络安全·php
视觉&物联智能3 小时前
【杂谈】-人工智能在风险管理中的应用:愿景与现实的差距
人工智能·网络安全·ai·aigc·agi
Bruce_Liuxiaowei3 小时前
内网探测常用技术方法整理
网络·安全·网络安全
小李独爱秋4 小时前
计算机网络经典问题透视:MD5报文是什么?有什么特点?
网络·网络协议·计算机网络·网络安全·信息与通信·信号处理
南行*4 小时前
C语言Linux环境编程
linux·c语言·开发语言·网络安全