www.2527.com_澳门新葡8455手机版_新京葡娱乐场网址_
做最好的网站

运用格局介绍_php功底_脚本之家,转义使用详细明

2019-11-23 19:58 来源:未知

实例代码: 复制代码 代码如下: @set_magic_quotes_runtime; $MQG = get_magic_quotes_gpc(); if $_POST = daddslashes; if $_GET = daddslashes; //转译字符函数 function daddslashes { if return addslashes; foreach($string as $key => $val) $string[$key] = daddslashes; return $string; } PHP提供两个方便我们引用数据的魔法引用函数magic_quotes_gpc和magic_quotes_runtime,这两个函数如果在php.ini设置为ON的时候,就会为我们引用的数据碰到 单引号' 和 双引号" 以及 反斜线 时自动加上反斜线,帮我们自动转译符号,确保数据操作的正确运行,可是我们在php不同的版本或者不同的服务器配置下,有的magic_quotes_gpc和magic_quotes_runtime设置为on,有的又是off,所以我们写的程序必须符合on和off两种情况。那么magic_quotes_gpc和magic_quotes_runtime两个函数有什么区别呢?看下面的说明: magic_quotes_gpc和magic_quotes_runtime函数区别 magic_quotes_gpc 作用范围是:web客户服务端; 作用时间:请求开始是,例如当脚本运行时。 magic_quotes_runtime 作用范围:从文件中读取的数据或是从SQL查询中得到的; 作用时间:每次当脚本访问运行状态中产生的数据。 所以magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据 例子说明: 复制代码 代码如下: $data1 = $_POST['aaa']; $data2 = implode; if(get_magic_quotes_gpc{ //把数据$data1直接写入数据库 }else{ $data1 = addslashes; //把数据$data1写入数据库,用函数 } if(get_magic_quotes_runtime{ //把数据$data2直接写入数据库 //从数据库读出的数据要经过一次stripslashes的作用是去掉: ,和addslashes()作用相反 }else{ $data2 = addslashes; //把数据$data2写入数据库 //从数据库读出的数据直接输出 } 最关键的区别是就是上面提到的2点:他们针对的处理对象不同 magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据 magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据 在这里顺便在提几个想关联的函数: set_magic_quotes_runtime(): 设置magic_quotes_runtime值. 0=关闭.1=打开.默认状态是关闭的. get_magic_quotes_gpc(): 查看magic_quotes_gpc值.0=关闭.1=打开 get_magic_quotes_runtime(): 查看magic_quotes_runtime值。0=关闭.1=打开. 注意的是没有 set_magic_quotes_gpc()这个函数,就是不能在程序里面设置magic_quotes_www.2527.com,gpc的值。

当你的数据中有一些 ” ‘ 这样的字符要写入到数据库里面,又想不被过滤掉的时候,它就很有用,会在这些字符前自动加上,如中国地大物博”哈哈”中国\地大物博”哈哈”可以使用set_maginc_quotes_runtime关闭掉,当然你也可以直接在php.ini中设置。get_magic_quotes_runtime() 取得 PHP 环境变量 magic_quotes_runtime 的值。magic_quotes_gpc 为 on,它主要是对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。不要对已经被 magic_quotes_gpc 转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可以使用函数 get_magic_quotes_gpc() 进行检测。两者不同

php中数据的魔法引用函数 magic_quotes_gpc 或 magic_quotes_runtime

set_magic_quotes_runtime() 可以让程序员在代码中动态开启或关闭 magic_quotes_runtime,set_magic_quotes_runtime 表示开启,set_magic_quotes_runtime 则表示关闭。当set_magic_quotes_runtime 时,从数据库或通过fread之类的函数读取的文本,将自动对' “和自动加上反斜杠进行转义,防止溢出。这在对数据库的数据进行转移的时候非常有用。但在一般情况下,应当将其关闭,否则从数据库读取出来的数据单引号、双引号和反斜杠都会被加上,导致显示不正常。像Discuz,PHPWind都在公共文件的头部加上一句 set_magic_quotes_runtime; 强制关闭 magic_quotes_runtime 。

设置为on时,为我们引用的数据碰到 单引号' 和 双引号" 以及 反斜线 时自动加上反斜线,帮我们自动转译符号,确保数据操作的正确运行两者的区别:

magic_quotes_gpc

magic_quotes_gpc作用范围是:WEB客户服务端;作用时间:请求开始是,例如当脚本运行时。

作用范围是:WEB客户服务端;作用时间:请求开始是,例如当脚本运行时.

magic_quotes_runtime作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;作用时间:每次当脚本访问运行状态中产生的数据。

magic_quotes_runtime

可以看出magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据

作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;作用时间:每次当脚本访问运行状态中产生的数据.

几个想关联的函数:set_magic_quotes_runtime():设置magic_quotes_runtime值. 0=关闭.1=打开.默认状态是关闭的.可以通过 echo phpinfo(); 查看magic_quotes_runtimeget_magic_quotes_gpc():查看magic_quotes_gpc值.0=关闭.1=打开get_magic_quotes_runtime():查看magic_quotes_runtime值。0=关闭.1=打开.注意的是没有 set_magic_quotes_gpc()这个函数,就是不能在程序里面设置magic_quotes_gpc的值。

所以

由于两个值的设置问题,会给编程时造成部分混淆或者会多加一次转义,针对这种情况,需要在程序开始的时候进行设置和判断,或者默认配置这两个值都关闭。转义部分通过程序来执行。

magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据,magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据,magic_quotes_gpc 是对通过GET、POST、COOKIE传递的数据进行转义,一般在数据入库前要先进行转义,magic_quotes_gpc不能在代码中动态开启或关闭,需要到php.ini将magic_quotes_gpc设置为on或off,代码中可以用get_magic_quotes_gpc获取magic_quotes_gpc的状态。当magic_quotes_gpc为off时,需要手工对数据进行addslashes,代码如下:复制代码 代码如下:if (!get_magic_quotes_gpc { new_addslashes; new_addslashes; new_addslashes; } function new_addslashes { if { foreach ($string as $key => $value) { $string[$key] = new_addslashes; } } else { $string = addslashes; } return $string; } 另一示例:复制代码 代码如下:$data1 = $_POST['aaa']; $data2 = implode; if (get_magic_quotes_gpc { //把数据$data1直接写入数据库 } else { $data1 = addslashes; //把数据$data1写入数据库 } if (get_magic_quotes_runtime{ //把数据$data2直接写入数据库 //从数据库读出的数据要经过一次stripslashes()之后输出 } else { $data2 = addslashes; //把数据$data2写入数据库 //从数据库读出的数据直接输出 }

保证数据插入数据时正常 通常会使用 addslashes 这个来处理, 数据读出时多用 stripslashes 来去掉加的反斜杠

php中类似的字符转换的函数addslashes 指定的预定义字符前添加反斜杠stripslashes 删除由 addslashes() 函数添加的反斜杠htmlspecialchars 把一些预定义的字符转换为 HTML 实体htmlspecialchars_decode 把一些预定义的 HTML 实体转换为字符html_entity_decode() 把 HTML 实体转换为字符htmlentities() 把字符转换为 HTML 实体

经验总结:一、对于GPC,不管系统有没有开启magic_quotes_gpc(即php.ini中magic_quotes_gpc = On),我们统一开启 magic_quotes_gpc,对get、post、cookie的内容进行转义。操作如下:复制代码 代码如下:function saddslashes { if { foreach ($string as $key => $val) { $string[$key] = saddslashes; } } else { $string = addslashes; } return $string; } //GPC过滤 $magic_quote = get_magic_quotes_gpc(); if { $_GET = saddslashes; $_POST = saddslashes; } //COOKIE,给cookie值转义 $prelength = strlen; foreach ($_COOKIE as $key => $val) { if(substr == $_SC['cookiepre']) { $_SCOOKIE[(substr] = empty ? saddslashes : $val; } } 二、对于magic_quotes_runtime,我们统一关闭它,即set_magic_quotes_runtime;不让从数据库读取出来的数据的单引号、双引号和反斜杠都自动被加上。这样,对数据库的操作如下:添加数据到数据库之前,我们手动对数据进行addslashes(),而从数据库取出数据时,则作相反操作,即stripslashes()。三、对于要序列化的内容,要保持裸数据,即要去掉转义,stripslashes(),然后在把序列化过的内容保存到数据库当中、双引号,示例如下:$feedarr['body_data'] = serialize(stripslashes;

出现Function set_magic_quotes_runtime() is deprecated 问题?在安装PHPCMS出现Deprecated: Function set_magic_quotes_runtime() is deprecated 错误,查了一下网络及资料发现是PHP5.3和PHP6.0之后移除了set_magic_quotes_runtime()函数。我可以使用如下方案替代:

view sourceprint?@set_magic_quotes_runtime;

view sourceprint?ini_set("magic_quotes_runtime", 0);

view sourceprint?if < '5.3.0') { set_magic_quotes_runtime; }

TAG标签:
版权声明:本文由澳门新葡8455手机版发布于www.2527.com,转载请注明出处:运用格局介绍_php功底_脚本之家,转义使用详细明