php字元轉義相關函式小結,有時候為了安全起見,我們需要對使用者輸入的字串進行轉義文章中有不正確的或者說辭不清的地方,麻煩大家指出了~~~
與php字串轉義相關的配置和函式如下:
1.magic_quotes_runtime
2.magic_quotes_gpc
3.addslashes()和stripslashes()
4.mysql_escape_string()
5.addcslashes()和stripcslashes()
6.htmlentities() 和html_entity_decode()
7.htmlspecialchars()和htmlspecialchars_decode()
當magic_quotes_runtime開啟時,php的大部分函式自動的給從外部引入的(包括資料庫或者檔案)資料中的溢位字元加上反斜線。
可以使用set_magic_quotes_runtime()與get_magic_quotes_runtime()設定和檢測其狀態。
注意:php5.3.0以上的版本已將這兩個函式廢棄,也就說在php5.3.0或以上版本時該選項已經為關閉了。
magic_quotes_gpc設定是否自動為gpc(get,post,cookie)傳來的資料中的某些字元進行轉義,
可以使用get_magic_quotes_gpc()檢測其設定。
如果沒有開啟這項設定,可以使用addslashes()函式新增給字串進行轉義
addslashes() 在指定的預定義字元前新增反斜槓。
預定義字元包括單引號(')、雙引號(")、反斜線(\)與 nul(null 字元)。
以上是w3school.com.cn給出的解釋俺一直覺的不是很準確
因為在magic_quotes_sybase=on時它將單引號(')轉換成雙引號(") 在magic_quotes_sybase=off時才將單引號(')轉換成(\')
stripslashes()函式的功能與addslashes()正好相反,它的功能是去除轉義的效果。
mysql_escape_string() 轉義 sql語句中使用的字串中的特殊字元。
這裡的特殊包括(\x00)、( \n)、( \r )、(\)、( ')、 (")、( \x1a)
addcslashes()
以c 語言風格使用反斜線轉義字串中的字元,這個函式很少人去用,但是應該注意的是:當選擇對字元 0,a,b,f,n,r,t 和 v
進行轉義時,它們將被轉換成 \0,\a,\b,\f,\n,\r,\t 和 \v。在 php 中,只有
\0(null),\r(回車符),\n(換行符)和 \t(製表符)是預定義的轉義序列, 而在 c
語言中,上述的所有轉換後的字元都是預定義的轉義序列。同理stripcslashes()的功能就是去除其轉義。
htmlentities() 把字元轉換為 html 實體。(什麼是html實體?自己google吧~~)
具體引數請見這裡,其逆反的函式html_entity_decode() -把 html 實體轉換為字元。
htmlspecialchars()函式把一些預定義的字元轉換為 html 實體。
這些預定義的字元是:
& (和號) 成為 &
" (雙引號) 成為 "
' (單引號) 成為 '
< (小於) 成為 <
> (大於) 成為 >
詳細引數請見這裡,其逆反函式是htmlspecialchars_decode() 把一些預定義的 html 實體轉換為字元。
一點自己的體會:
>>多次的單引號轉義可能引起資料庫的安全問題
>> 不建議使用mysql_escape_string 來進行轉義,建議在獲取使用者輸入時候進行轉義
>> 由於set_magic_quotes_runtime()在php5.3.0和以後版本已被廢棄了, 所以之前的版本建議統一配置關閉:
複製**
**如下:
if(phpversion() < '5.3.0')
>> 無法通過函式來定義magic_quotes_gpc,因此建議在伺服器上統一開啟,寫程式的時候應該在來判斷下,避免沒開啟gpc引起安全問題
通過addslashes對gpc進行時候轉義時,應注意當使用者提交陣列資料時對鍵值和值的過濾
複製**
**如下:
if(!get_magic_quotes_gpc())
function daddslashes($string, $force = 1)
} else
return $string;
} >> 利用在使用者輸入或輸出時候轉義html實體以防止xss漏洞的產生!
今天碰到乙個處理檔案特殊字元的事情,再次注意到這個問題,在php中:
* 以單引號為定界符的php字串,支援兩個轉義\'和\\
* 以雙引號為定界符的php字串,支援下列轉義:
\n 換行(lf 或 ascii 字元 0x0a(10))
\r 回車(cr 或 ascii 字元 0x0d(13))
\t 水平製表符(ht 或 ascii 字元 0x09(9))
\\ 反斜線
\$ 美元符號
\" 雙引號
\[0-7] 此正規表示式序列匹配乙個用八進位制符號表示的字元
\x[0-9a-fa-f] 此正規表示式序列匹配乙個用十六進製制符號表示的字元
舉幾個例子:
乙個包含\0特殊字元的例子:
返回的json格式可以使用一些類格式化json成陣列
?>
轉義字元小結
在jsp中,都有特殊的含義和用途,如以 標籤作為scriptlets的起始 標籤作為scriptlets的結束等,所以在jsp 程式中如果遇到這些字元時都要進行適當修改,如下所示。1 單引號 改為 2 雙引號 改為 3 斜線 改為 4 起始標籤 改為 5 結束標籤 改為 在例4 9中的以下語句中 o...
php 字元轉義
php中字元轉移函式如下 1 htmlspecialchars和htmlentities 1 htmlspecialchars 將 與 單雙引號 大於和小於號轉換成 html格式 echo htmlspecialchars fd sa fda fds afd fgjhou nbbfd sa fda ...
PHP轉義字元
1.magic quotes runtime 2.magic quotes gpc 3.addslashes 和stripslashes 4.mysql escape string 5.addcslashes 和stripcslashes 6.htmlentities 和html entity de...