一,首先,先来看一下php.ini的两个配置参数
magic_quotes_gpc "1" PHP_INI_PERDIR PHP_INI_ALL in PHP <= 4.2.3. Removed in PHP 6.0.0.
作用范围是:WEB客户服务端;
作用时间:请求开始是,例如当脚本运行时
magic_quotes_runtime "0" PHP_INI_ALL Removed in PHP 6.0.0.
作用范围是:影响从文件中读取的数据或从数据库查询得到的数据。
以下是一些常用到的方法:
get_magic_quotes_gpc(void)
本函数取得 PHP 环境配置的变量 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。
返回 0 表示关闭本功能;
返回 1 表示本功能打开。
当 magic_quotes_gpc 打开时,所有的 ' (单引号), " (双引号), \ (反斜线) and 空字符会自动转为含有反斜线的溢出字符。
应用:
由于该参数不支持在php文件进行设置,如果通过本函数取得的变量magic_quotes_gpc 的值为false,我们可以
利用addslashes()人工使用反斜线引用字符串
$var = get_magic_quotes_gpc()?$var:addslashes($var);
相反,如果通过本函数取得的变量magic_quotes_gpc 的值为true,我们希望字符串不被转义,那么可以利用stripslashes()去除自动添加的反斜杠
get_magic_quotes_runtime()
一般情况下,应当将其关闭,否则从数据库读取出来的数据单引号、双引号和反斜杠都会被加上\,导致显示不正常。像Discuz,PHPWind都在公共文件的头部加上一句
set_magic_quotes_runtime(0)
// Check if magic_quotes_runtime is active
if(get_magic_quotes_runtime())
{
// Deactive
set_magic_quotes_runtime(false);
}
二、对于magic_quotes_runtime,我们统一关闭它,即set_magic_quotes_runtime(0);不让从数据库读取出来的数据的单引号、双引号和反斜杠都自动被加上\。这样,对数据库的操作如下:添加数据到数据库之前,我们手动对数据进行addslashes(),而从数据库取出数据时,则作相反操作,即stripslashes()。
三、对于要序列化的内容,要保持裸数据,即要去掉转义,stripslashes(),然后在把序列化过的内容保存到数据库当中(注意,序列化过的内容是不带单引号(')、双引号(")、反斜线(\)的),示例如下:
$feedarr['body_data'] = serialize(stripslashes($body_data));