中山php|最优网络中山做网站 中山php建站

最优良人

2011/08/07 at 02:01

php过滤敏感字符的一些相关函数--魔法函数应用

一,首先,先来看一下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));

标签:,
-