PHP魔法函數 自動轉義 magic_quotes_gpc和magic_quotes_runtim

PHP魔法函數 自動轉義 magic_quotes_gpc和magic_quotes_runtim

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的設定值將會影響從文件中讀取的數據或從數據庫查詢獲得的數據
例子說明:
複製內容到剪貼板
代碼: php

<form action="" method="post" >
STR:<input type="text" name="str">
<input type="submit">
</form>
<?php
/* 咱們在表單裏填寫:    '"\    這些符號,若是magic_quotes_gpc沒有開啓,那麼他們不會被反斜槓轉義 */
echo '如今經過POST傳遞過來的值是:' ,$_POST['str'], '
';
if (get_magic_quotes_gpc()) {&nbsp,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 = implode(file('try.php'));      // 咱們在裏面依然寫'"\這幾個字符,用來測試
echo '這裏是try.php的數據,';
if (get_magic_quotes_runtime()) {
      $data = $data;
      echo '被系統自帶轉義的' .$data;
} else {
      echo '被addslashes轉義了的' .$data = 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()來檢測狀態 mysql

相關文章
相關標籤/搜索