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

相关推荐
Bug.ink18 小时前
BUUCTF——WEB(2)
数据库·sql·网络安全·buuctf
Spider赵毅19 小时前
python实战 | 如何使用海外代理IP抓取Amazon黑五数据
python·tcp/ip·php
李慕婉学姐19 小时前
【开题答辩过程】以《基于PHP的动漫社区的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
开发语言·mysql·php
xixixi7777720 小时前
STIX/TAXII:网络威胁情报的“普通话”与“顺丰快递”
开发语言·安全·php·威胁·攻击检测·stix·taxii
前进的李工20 小时前
零知识证明:不泄露秘密也能自证
人工智能·web安全·区块链·零知识证明
Bruce_Liuxiaowei21 小时前
全面TCP端口扫描:Nmap高级扫描技术与实战应用
网络·tcp/ip·网络安全·php
emma羊羊21 小时前
【Yakit渗透利器】
安全·web安全
catchadmin21 小时前
PHP 8.6 新增 clamp() 函数
开发语言·php
隔壁小白21 小时前
PHP 8.1 枚举(Enums)详解
php
Bug.ink1 天前
BUUCTF——WEB(3)
web安全·网络安全·buuctf