php stripslashes和addslashes的区别介绍

 这篇文章主要介绍了php stripslashes和addslashes的区别,特分享下方便需要的朋友。

我们在向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()。
 
最后举例:
 
代码如下:
代码 
//提交数据,或者变量准备:
$Content=addslashes(”这里面是数据,不管有没单引号或者还是变量”);
//插入数据到数据库,代码省略
//开始显示数据
$Content=”从数据库读取的数据”;
if(get_magic_quotes_gpc()){
  $Content=stripslashes($Content); 
}
echo $Content;
 

时间: 2024-08-19 22:36:01

php stripslashes和addslashes的区别介绍的相关文章

php stripslashes和addslashes的区别_php技巧

我们在向mysql写入数据时,比如: 复制代码 代码如下: mysql_query("update table set `title`='kuhanzhu's blog'"); 那就会出错.同asp时一样,数据库都会对单引号过敏.而addslashes在这个时候就最长面子了,跟asp的replace("'",""","kuhanzhu's blog")功能一样. PHP为了安全性,所以引入了个magic_quotes

php中stripslashes与addslashes用法区别

addslashes addslashes() 函数在指定的预定义字符前添加反斜杠. 这些预定义字符是: •单引号 (') •双引号 (") •反斜杠 () •NULL 在本例中,我们要向字符串中的预定义字符添加反斜杠: 注释:默 认情况下,PHP 指令 magic_quotes_gpc 为 on,对所有的 GET.POST 和 COOKIE 数据自动运行 addslashes().不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转

执行Shell脚本的4种方法及区别介绍

  这篇文章主要介绍了执行Shell脚本的4种方法及区别介绍,本文讲解了相对路径方式.绝对路径方式.bash命令调用.相对或绝对方式以及说下几种方式的区别,需要的朋友可以参考下 执行shell脚本有以下几种方式 1.相对路径方式,需先cd到脚本路径下 代码如下: [root@banking tmp]# cd /tmp [root@banking tmp]# ./ceshi.sh 脚本执行成功 2.绝对路径方式 代码如下: [root@banking tmp]# /tmp/ceshi.sh 脚本执

Ruby中require、load、include、extend的区别介绍

  这篇文章主要介绍了Ruby中require.load.include.extend的区别介绍,require.load用于文件,如.rb等等结尾的文件,include.load则用于包含一个文件中的模块,需要的朋友可以参考下 require,load用于文件,如.rb等等结尾的文件.include,load则用于包含一个文件中的模块. require 一般情况下用于加载库文件,而load则用于加载配置文件. 1.require:加载一个库,并且只加载一次,如果多次加载会返回false.只有当

Laravel模板引擎Blade中section的一些标签的区别介绍

 这篇文章主要介绍了Laravel模板引擎Blade中section的一些标签的区别介绍,本文讲解了@yield 与 @section.@show 与 @stop.@append 和 @override的区别,需要的朋友可以参考下     Laravel 框架中的 Blade 模板引擎,很好用,但是在官方文档中有关 Blade 的介绍并不详细,有些东西没有写出来,而有些则是没有说清楚.比如,使用中可能会遇到这样的问题: 1.@yield 和 @section 都可以预定义可替代的区块,这两者有什

正则表达式中test、exec、match的区别介绍及括号的用法

test.exec.match的简单区别 1.test test 返回 Boolean,查找对应的字符串中是否存在模式. var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(reg.test(str)); // true 2.exec exec 查找并返回当前的匹配结果,并以数组的形式返回. var str = "1a1b1c"; var reg = new Re

Java语言----三种循环语句的区别介绍_java

第一种:for循环 循环结构for语句的格式:      for(初始化表达式;条件表达式;循环后的操作表达式) { 循环体;   } eg: class Dome_For2{ public static void main(String[] args) { //System.out.println("Hello World!"); //求1-10的偶数的和 int sum = 0; for (int i = 1;i<=10 ; i++ ) { if (i%2 ==0) { //

Java中for、while、do while三种循环语句的区别介绍_java

本文通过实例讲解给大家介绍Java中for.while.do while三种循环语句的区别,具体详情如下所示: 第一种:for循环 循环结构for语句的格式: for(初始化表达式;条件表达式;循环后的操作表达式) { 循环体; } eg: class Dome_For2{ public static void main(String[] args) { //System.out.println("Hello World!"); //求1-10的偶数的和 int sum = 0; fo

jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍_jquery

insertBefore():a.insertBefore(b) a在前,b在后, a:是一个选择器,b:也是一个选择器 <!DOCTYPE html> <html> <head> <meta charset='UTF-8'> <title>jqu</title> <script type="text/javascript" src='jquery-2.2.0.min.js'></script&g