最優(yōu)良人 » 魔法函數 http://www.dgkai.cn/blog 中山php|最優(yōu)網絡 Mon, 13 May 2013 04:56:43 +0000 en hourly 1 http://wordpress.org/?v=3.1.4 php過濾敏感字符的一些相關函數--魔法函數應用 http://www.dgkai.cn/blog/view-23.html http://www.dgkai.cn/blog/view-23.html#comments Sat, 06 Aug 2011 18:01:50 +0000 lin http://www.dgkai.cn/blog/?p=23 一,首先,先來看一下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 環(huán)境配置的變量 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,我們統(tǒng)一關閉它,即set_magic_quotes_runtime(0);不讓從數據庫讀取出來的數據的單引號、雙引號和反斜杠都自動被加上\。這樣,對數據庫的操作如下:添加數據到數據庫之前,我們手動對數據進行addslashes(),而從數據庫取出數據時,則作相反操作,即stripslashes()。

三、對于要序列化的內容,要保持裸數據,即要去掉轉義,stripslashes(),然后在把序列化過的內容保存到數據庫當中(注意,序列化過的內容是不帶單引號(')、雙引號(")、反斜線(\)的),示例如下:

$feedarr['body_data'] = serialize(stripslashes($body_data));

]]>
http://www.dgkai.cn/blog/view-23.html/feed 345