PHP中自动转义--小结
来源:互联网 发布:外国人吃中国食物 知乎 编辑:程序博客网 时间:2024/06/10 09:45
<?php
magic_quotes_gpc
作用范围 服务端
作用时间 请求开始时
影响 会影响通过get|post|cookies获得的数据
magic_quotes_runtime
作用范围 从文件中读取的数据|执行exec()的结果|从sql得到数据
作用时间 每次当脚本访问运行状态中产生的数据
一般用法
if(get_magic_quotes_gpc()){$data=$_POST["key"];}
else{$data=addslashes($_POST["key"]);}
?>
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作用范围是:WEB客户服务端;
作用时间:请求开始是,例如当脚本运行时.
magic_quotes_runtime
作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的;
作用时间:每次当脚本访问运行状态中产生的数据.
所以
magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据
magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据
例子说明:
复制内容到剪贴板
代码:
<form action="" method="post" >
STR:<input type="text" >
<input type="submit">
</form>
<?php
/* 我们在表单里填写: '"\ 这些符号,如果magic_quotes_gpc没有开启,那么他们不会被反斜杠转义 */
echo '现在通过POST传递过来的值是:' ,$_POST['str'], '
';
if (get_magic_quotes_gpc()) { ,forex; // 检查magic_quotes_gpc是否打开,如果没有打开,用addslashes进行转义
$str = $_POST['str'];
} else {
$str = addslashes($_POST['str']);
}
echo '这里是转义过后的:' ,$str, '<hr />';
$sql = "INSERT INTO lastnames (lastname) VALUES ('$str')";
//================================================ =====================================
//-----magic_quotes_gpc只会转义: 通过Get/Post/Cookies获得的数据
//-----magic_quotes_runtime会转义:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的
//================================================ =====================================
$data = http://blog.soso.com/qz.q/implode(file('try.php')); // 我们在里面依然写'"\这几个字符,用来测试
echo '这里是try.php的数据,';
if (get_magic_quotes_runtime()) {
$data = http://blog.soso.com/qz.q/$data;
echo '被系统自带转义的' .$data;
} else {
echo '被addslashes转义了的' .$data = http://blog.soso.com/qz.q/addslashes($data);
}
$sql = "INSERT INTO lastnames (lastname) VALUES ('$data')";
echo '
SQL语句为:
' ,$sql;
//---入库都转义了,但是多余了反斜杠,我们要读出来是原来的数据时候使用stripslashes()去掉反斜杠
//---stripslashes()和addslashes()作用相反
?>
最关键的区别是就是上面提到的2点:他们针对的处理对象不同
magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据
magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据
在这里顺便在提几个想关联的函数:
set_magic_quotes_runtime():
设置magic_quotes_runtime值. 0=关闭.1=打开.默认状态是关闭的.可以通过 echo phpinfo(); 查看magic_quotes_runtime
get_magic_quotes_gpc():
查看magic_quotes_gpc值.0=关闭.1=打开.
get_magic_quotes_runtime():
查看magic_quotes_runtime值。0=关闭.1=打开.
注意的是没有 set_magic_quotes_gpc()这个函数,就是不能在程序里面设置magic_quotes_gpc的值。
================================================== =====
使用stripslashes去掉转义,使用addslashes添加转义字符。
string addslashes ( string str) 返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(\')、双引号(\")、反斜线(\\)与 NUL(NULL 字符) stripslashes作用相反在处理mysql和GET、POST的数据时,常常要对数据的引号进行转义操作。 PHP中有三个设置可以实现自动对'(单引号),"(双引号),\\(反斜线)和 NULL 字符转移。 PHP称之为魔术引号,这三项设置分别是 magic_quotes_gpc 影响到 HTTP 请求数据(GET,POST 和 COOKIE)。
不能在运行时改变。在 PHP 中默认值为 on。 magic_quotes_runtime 如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。 magic_quotes_sybase 如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 "。而双引号、反斜线和 NULL 字符将不会进行转义。虽然方便的实现了对特殊符号的自动转义,但是这样会使得程序效率降低,并导致程序可移植变得麻烦。在不知道服务器ini设置的情况 下,还需要调用get_magic_quotes_gpc() ,get_magic_quotes_runtime() 或ini_get()来检测状态。
- PHP中自动转义--小结
- PHP引号转义中解决POST,GET,Mysql数据自动转义问题
- PHP引号转义中解决POST,GET,Mysql数据自动转义问题
- PHP自动转换转义字符
- 2. PHP 自动转义函数
- PHP自动转义和还原字符串
- php中转义html标签
- php 数组-小结
- PHP字符转义相关函数小结(php下的转义字符串)
- smarty 模板引擎 中 自动转义问题
- PHP中使用转义字符“\”对字符串进行转义
- PHP中使用JavaScript, 转义用法
- 在PHP中转义正则表达式字符
- php中添加或去掉转义字符
- php中get_magic_quotes_gpc和get_magic_quotes_runtime 字符转义
- php中对特殊字符的转义
- php单引号中字符串的转义("\")
- php单引号中字符串的转义(\"\\\")
- Acclerated c++之打印三角形
- 海关将扣押与我国主张不一致境外地图-海关-境外地图
- Samba vfs: mysql_audit 備忘
- left join、right join、inner join的区别
- Wireless tools for Linux 的一些资料收集
- PHP中自动转义--小结
- 以前画的一张技术开发框架图,分享一下
- SWT/Jface 全接触
- 利用泛型、反射 读取数据库数据
- 用phpize编译动态扩展模块
- 活动目录基础知识
- Hash 算法及其应用
- 破解360手机助手的锁定功能
- 黑龙江发布道路结冰黄色预警和暴雪蓝色预警-气象台-黑龙江-冷空气