PHP中的魔術引號

2021-10-02 05:46:52 字數 1633 閱讀 9060

魔術引號(magic quote)是乙個自動將進入 php 指令碼的資料進行轉義的過程。

什麼是魔術引號

當開啟時,所有的 '(單引號),"(雙引號),\(反斜線)都會被自動加上乙個反斜線進行轉義。這和addslashes()作用完全相同。

三個魔術引號指令:

1.

magic_quotes_gpc

() 影響到 http 請求資料(get,post 和 cookie)。不能在執行時改變。在 php 中預設值為 on。

get_magic_quotes_gpc

()獲取當前 magic_quotes_gpc

() 的配置選項設定

2.magic_quotes_runtime

() 如果開啟的話,大多數從外部**取得資料並返回的函式,包括從資料庫和文字檔案,所返回的資料都會被反斜線轉義。該選項可在執行時改變,在 php 中的預設值為 off。

set_magic_quotes_runtime

()設定當前 magic_quotes_runtime

() 配置選項的啟用狀態

get_magic_quotes_runtime

()獲取當前 magic_quotes_runtime

() 配置選項的啟用狀態

3.magic_quotes_sybase

() 如果開啟的話,將會使用單引號對單引號進行轉義而非反斜線。此選項會完全覆蓋 magic_quotes_gpc

()。如果同時開啟兩個選項的話,單引號將會被轉義成 ''。而雙引號、反斜線 和 null 字元將不會進行轉義。

為什麼要用魔術引號

為了幫助新手在不知不覺中寫出了更好(更安全)的**,防止sql 注入。 但是在處理**的時候,最好是更改你的**而不是依賴於魔術引號的開啟。

如今php已經不再支援魔術引號,此特性已自 php 5.3.0 起廢棄並將自 php 5.4.0 起移除。 開發者們開始使用資料庫轉移機制或者 prepared 語句來取代魔術引號功能。

為什麼不用魔術引號

可移植性

程式設計時認為其開啟或並閉都會影響到移植性。可以用get_magic_quotes_gpc() 來檢查是否開啟,並據此程式設計。

效能

由於並不是每一段被轉義的資料都要插入資料庫的,如果所有進入 php 的資料都被轉義的話,那麼會對程式的執行效率產生一定的影響。在執行時呼叫轉義函式(如 addslashes())更有效率。 儘管 php.ini-dist 預設開啟了這個選項,但是 php.ini-recommended 預設卻關閉了它,主要是出於效能的考慮。

不便

由於不是所有資料都需要轉義,在不需要轉義的地方看到轉義的資料就很煩。比如說通過表單傳送郵件,結果看到一大堆的\ '。針對這個問題,可以使用 stripslashes() 函式處理。

addslashes()— 使用反斜線引用字串(在單引號(』)、雙引號(")、反斜線(\)前加上反斜線進行轉義)

stripslashes()— 反引用乙個引用字串(刪去字串中的反斜線)

PHP中的魔術引號

魔術引號 magic quote 是乙個自動將進入 php 指令碼的資料進行轉義的過程。最好在編碼時不要轉義而在執行時根據需要而轉義。當開啟時,所有的 單引號 雙引號 反斜線 和 null 字元都會被自動加上乙個反斜線進行轉義。這和 b addslashes b 作用完全相同。轉義魔術引號的函式 b...

php魔術引號總結

在乙個專案中,魔術引號若是開啟的話,所有的反斜線 單引號 雙引號 null 字元都會被自動加上乙個反斜線進行轉義,這和 addslashes 作用完全相同。這裡主要講四個與之相關的函式 set magic quotes runtime magic quotes gpc addslashes stri...

什麼是PHP魔術引號

今天在讀ecshop的原始碼中發現裡面有幾個地方涉及到了php魔術引號,之前也碰到過都忽略過去了,再次碰到該深入的理解,雖然自php 5.3.0起魔術引號被廢棄廢棄並將自php 5.4.0起移除,但是了解魔術引號以後,在閱讀一些php 5.3.0之前原始碼碰到了魔術引號閱讀起來也很順暢。什麼是魔術引...