stripslashes和addslashes的区别

本文探讨了PHP中处理数据库单引号问题的方法,介绍了addslashes()和stripslashes()函数的作用及使用场景,并提供了不同magic_quotes_gpc配置下的一致解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在向mysql写入数据时,比如:

mysql_query(”update table set `title`=’kuhanzhu’s blog’”);

 

  那就会出错。同asp时一样,数据库都会对单引号过敏。而addslashes在这个时候就最长面子了,跟asp的replace(”‘”,”””,”kuhanzhu’s blog”)功能一样。

PHP为了安全性,所以引入了个magic_quotes_gpc = On的功能,可以不需要做任何处理就能直接把单引号插入数据库中,那么对于Off时,则需要考虑单引号的问题了,而不是一味地信任运行环境。

magic_quotes_gpc = On时,使用了addslashes()处理后的数据在数据库中将以\’形式保存,如果此时直接输出的话,就会发现比自己期待的内容多了个\,因此stripslashes()出场了,它能把\去掉(区别于str_replace(”\”, “”,$Str))。

magic_quotes_gpc = Off时,使用了addslashes()处理后的数据在数据库中将以’形式保存,没有上面说的有\的问题,addslashes()起到插入数据不出错的作用,如果此时直接输出的话,数据正常。不需要再用stripslashes()。

addslashes()和stripslashes()正好是相反的,直接记忆:addslashes()加个\,stripslashes()去个\

那么什么时候用呢?

简单说:

当magic_quotes_gpc = On时,系统会自动处理单引号等问题,用不用addslashes()和stripslashes()都没关系,但是如果添加数据时用了addslashes(),那么显示数据时必须要stripslashes()

当magic_quotes_gpc = Off时,系统不会处理单引号等问题,所以插入数据时必须要使用addslashes(),显示数据时则不需要使用stripslashes()。

既然有了分析,做程序时要怎么办呢?根据以上两种情况,可得:

不管magic_quotes_gpc是On还是Off,咱添加数据时都用addslashes(),当On时,必须使用stripslashes(),Off时则不能用stripslashes()。

如何判断On还是Off呢?用get_magic_quotes_gpc()。

最后举例:

 

ExpandedBlockStart.gif代码
//提交数据,或者变量准备:

$Content=addslashes(”这里面是数据,不管有没单引号或者还是变量”);

//插入数据到数据库,代码省略

//开始显示数据


$Content=”从数据库读取的数据”;

if(get_magic_quotes_gpc()){
  
$Content=stripslashes($Content); 
}

echo $Content;

 

 

<think>嗯,用户想了解PHP中的stripslashes()函数的用法,或者解决与之相关的问题。首先,我需要回忆一下stripslashes()的作用。这个函数应该是用来去除由addslashes()添加的反斜杠转义字符的。比如,当处理用户输入或者数据库数据时,可能会用到转义,之后需要还原的时候就用这个函数。 用户可能遇到了转义字符处理的问题,比如数据存入数据库前被转义,取出后显示时带有不必要的反斜杠。这时候就需要用stripslashes()来还原。不过要注意,如果PHP的magic_quotes_gpc设置开启的话,自动转义可能会导致重复转义,这时候可能需要先检查这个设置是否开启,再决定是否使用stripslashes()。 接下来,我需要整理stripslashes()的具体用法,包括参数返回值。参数是字符串,返回处理后的字符串。然后举几个例子,比如处理表单数据,或者处理从数据库取出的数据。同时要注意,如果magic_quotes_gpc开启的话,可能需要先判断再处理,避免重复转义。 用户可能还关心这个函数addslashes()的关系,以及与其他转义函数如mysql_real_escape_string的区别。不过根据问题,重点应该放在stripslashes()本身。另外,用户提供的引用资料中提到magic_quotes_gpc已经废弃,所以在PHP5.4之后可能不需要处理这个配置了,但需要提醒用户注意版本兼容性问题。 可能还需要提到常见的使用场景,比如处理用户输入、处理序列化数据、处理JSON数据时的注意事项。同时,安全方面的问题,比如不要依赖stripslashes()来防止SQL注入,应该使用预处理语句。 最后,生成相关问题的时候,可以围绕转义函数、配置项、与其他函数的区别、实际应用中的问题等方面展开。确保问题覆盖用户可能进一步想了解的内容。</think>### PHP stripslashes() 函数详解 #### 1. 函数作用 `stripslashes()` 用于**删除由 `addslashes()` 添加的反斜杠转义符**,主要用于还原被转义的字符串[^4]。例如: ```php $str = "It\'s a test"; echo stripslashes($str); // 输出:It's a test ``` #### 2. 核心语法 ```php string stripslashes(string $str) ``` - **参数**:`$str` 需要处理的字符串 - **返回值**:处理后的字符串(反斜杠被删除) #### 3. 典型使用场景 1. **表单数据处理**(当 `magic_quotes_gpc` 开启时自动转义): ```php if (get_magic_quotes_gpc()) { $name = stripslashes($_POST['name']); } else { $name = $_POST['name']; } ``` 注意:`magic_quotes_gpc` 已在 PHP 5.4+ 被废弃[^4] 2. **数据库数据还原**: ```php $data = $row['content']; // 从数据库读取被转义的数据 echo stripslashes($data); // 输出原始内容 ``` #### 4. 安全注意事项 - **不要用于防御SQL注入**:应使用预处理语句(PDO/mysqli)而非依赖此函数[^2] - **配合使用示例**: ```php $input = addslashes($_GET['q']); // 转义输入 // 存储到数据库... $output = stripslashes($db_data); // 取出时还原 ``` #### 5. 与类似函数对比 | 函数 | 作用 | 反向函数 | |---------------------|-----------------------------|-------------------| | `addslashes()` | 添加转义符(' " \ NUL) | `stripslashes()` | | `addcslashes()` | 自定义字符转义 | `stripcslashes()` | | `htmlspecialchars()` | 转义HTML特殊字符 | `htmlspecialchars_decode()` | #### 6. 常见错误案例 **重复转义问题**: ```php // 错误用法(PHP 5.4以下且 magic_quotes_gpc 开启时) $str = stripslashes($_POST['data']); // 导致过度删除反斜杠 ``` 正确做法应先检测配置: ```php if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) { $str = stripslashes($_POST['data']); } ``` 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值