php stripslashes 函式的意思

2022-03-20 19:35:39 字數 3197 閱讀 3985

腦子不行了,很多東西看過就忘,比如這個stripslashes,知道是去除反斜槓,但為啥用它死活想不起來,搜尋一下,把這幾篇文章抄下來:

1、反斜槓是怎麼回事

兩個東西

ini_set(magic_quotes_gpc) 獲取magic_quotes_gpc的配置資訊,如果這個值是true的話

所有的 ' (單引號)、" (雙引號)、\(反斜槓)和 nul's 被乙個反斜槓自動轉義。

比如你在表單裡提交xiaoming's dog  服務端收到的資料就是  xiaoming\'s dog

2 .stripslashes 反引用乙個引用字串 就是把\去了

結合起來看上面那段函式的意思就是

如果php的配置magic_quotes_gpc開啟,那麼移除反斜槓。。。

2、關於反斜槓:

在php5及之前,magic_quotes_gpc預設是開啟的。magic_quotes_gpc的作用很微妙,我一直使用php5多年,magic_quotes_gpc呈開啟狀態,平時沒有受到任何影響。直到發現php的cookies,如果有'這樣的標點符號,在cookies裡,會將這些符號全部轉義為\'。查閱了大量的資料,解決的辦法是將php.ini的magic_quotes_gpc設定為off,或者不改變php.ini,在.htaccess裡將magic_quotes_gpc設定為off,方法是在.htaccess裡寫入:

php_value magic_quotes_gpc off

php6、php7的php.ini裡沒有magic_quotes_gpc的選項,實際呈關閉狀態。magic_quotes_gpc關閉之後,為了加強安全,原來所有的$_post['abc']和$_get['abc']最好全部加上stripslashes()來轉義,例如:

$aa=stripslashes($_post['abc']);

$aa=stripslashes($_get['abc']);

php關閉magic_quotes_gpc之後,有乙個很特殊的影響。比如在post表單裡,如果傳送的資訊裡恰好有反斜槓符\,如果是用stripslashes($_post['abc'])來接收,反斜槓符會被全部刪除。例如在重要的專案裡,提交的內容為:w:\ac3\about,接收到的內容變為:w:ac3about。

(這個影響,有可能在本機的php下會刪除反斜槓,有些伺服器不會刪除。)

經過測試,解決的辦法是,這時去掉stripslashes,反斜槓符就不會被替換掉,例如:

$aa=$_post['abc'];

但這樣會帶來不安全,解決的辦法是把提交的資訊裡的《符轉成<,例如:

$aa=str_replace('<','<',$aa);

經過測試,如果傳送的資訊裡有反斜槓符\,用$aa=stripslashes($_get['abc'])接收,反斜槓符不受影響,不會被刪除

3、php表單提交後引號前自動加反斜槓的原因及三種辦法關閉php魔術引號

最近發現做乙個php程式表單資料提交寫入資料庫的內容中只要是帶有單引號或者雙引號的內容時,後面都會增加乙個反斜槓。而且每儲存一次增加乙個反斜槓,很是鬱悶。

於是從網上搜了一下原來是php程式為了防止注入或者溢位,通過php 指令 magic_quotes_gpc自動在雙引號、單引號、反斜槓、null前面新增反斜槓。

預設php 指令 magic_quotes_gpc是on的,也就是開啟的。這時候就可以用stripslashes() 函式刪除自動新增的反斜槓。用法就是:比如包含字串的變數是$str,那麼就用stripslashes() 函式處理一下這個字串:stripslashes($str),輸出的結果就是去掉反斜槓的。

於是我就把讀取的字串內容用stripslashes()函式處理一下,即$value=stripslashes($str),再儲存。

但是又出現另外乙個問題,那就是因為本地php 指令 magic_quotes_gpc是off的,如果用這個函式的話,就會把本來正常的反斜槓也去掉了。這樣就不是我們所希望的了。

解決辦法就是可以使用函式 get_magic_quotes_gpc() 進行檢測,如果是開啟的狀態,那麼就去除反斜槓,如果是關閉的狀態,則不去除反斜槓。

程式**如下:

$str=$_post["str"];//讀取str的內容賦值給$str變數

if(get_magic_quotes_gpc())//如果get_magic_quotes_gpc()是開啟的

下面介紹三種方法解決這個問題:

方法1:修改php配置檔案php.ini

這種方法只適於自己有權管理伺服器的情況下,如果用的虛擬空間,那就只能採用後兩條方法。

在php配置檔案php.ini中將magic_quotes_gpc、magic_quotes_runtime、magic_quotes_sybase全部設為off。如下所示:

magic_quotes_gpc = off

magic_quotes_runtime = off

magic_quotes_sybase = off

方法2:利用.htaccess檔案

該方法只在伺服器支援htaccess的情況下,現在的伺服器一般都會支援的

在程式目錄下.htaccess檔案中增加下面一句:

複製** **如下:

php_flag magic_quotes_gpc off

方法3: 在**中遮蔽

該方法是移植性最強的,不用考慮伺服器的配置,只要支援php就可以使用。

在所有php檔案開始處增加下面**

if(get_magic_quotes_gpc())

$_post=array_map('stripslashes_deep',$_post);

$_get=array_map('stripslashes_deep',$_get);

$_cookie=array_map('stripslashes_deep',$_cookie);

$_request=array_map('stripslashes_deep',$_request);

}

python 中scatter 函式個引數意思

最近開始學習python程式設計,遇到scatter函式,感覺裡面的引數不知道什麼意思於是查資料,最後 總結如下 1 scatter函式原型 2 其中散點的形狀引數marker如下 3 其中顏色引數c如下 4 基本的使用方法如下 python view plain copy 匯入必要的模組 impo...

FormBorderStyle的屬性及意義

formborderstyle的屬性及意義 屬 性 意 義 formborderstyle.none 無邊框formborderstyle.fixedsingle 固定的單行邊框 formborderstyle.fixed3d 固定的三維樣式邊框 formborderstyle.fixeddialo...

常見的DoDataExchange什麼意思

該函式中的 是由classwizard自動加入的。dodataexchange只有乙個引數,即乙個cdataexchange物件的指標pdx。在該函式中呼叫了ddx函式來完成資料交換,呼叫ddv函式來進行資料有效檢查。當程式需要交換資料時,不要直接呼叫dodataexchange函式,而應該呼叫cw...