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實體
htmlspecialchars()函式把一些預定義的字元轉換為 html 實體。這些預定義的字元是: & (和號) 成為 & 」
(雙引號) 成為 」 』
(單引號) 成為 』
< (小於) 成為 <
>(大於) 成為 >
詳細引數請見這裡
其逆反函式是htmlspecialchars_decode() 把一些預定義的 html 實體轉換為字元。
<?php if(phpversion()
< '5.3.0') ?>
<?php
function
daddslashes
($string, $force = 1)
} else
return
$string;
}if( !get_magic_quotes_gpc() )
?>
>> 利用在使用者輸入或輸出時候轉義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特殊字元的例子:
<?php
$str = "ffff\0ffff";
echo strlen($str),"
"; echo("\n");
for ($i=0;$i
$str);$i++) );
} echo
"\n";
?>
輸出結果:
----------------------
9102
102102
1020
102102
102102
替換特殊字元的例子
<?php
$str = "ffff\0ffff";
$str = str_replace("\x0", "", $str);
//或者用$str = str_replace("\0", "", $str);
//或者用$str = str_replace(chr(0), "", $str);
echo strlen($str);
echo
"";
for ($i=0;$i
$str);$i++) );
}echo("\n");
?>
輸出結果:
----------------------
8102
102102
102102
102102
102
八進位制ascii碼例子:
<?php
//注意,符合正則\[0-7]的字串,表示乙個八進位制的ascii碼。
$str = "\0\01\02\3\7\10\011\08\8"; //這裡的\8不符合要求,被修正為"\\8" (ascii為92和56)
echo strlen($str),"
"; for ($i=0;$i
$str);$i++) );
}
echo
"";
?>
輸出結果:
---------------------- 110
1237
89056
9256
十六進製制ascii碼例子:
<?php
$str = "\x0\x1\x2\x3\x7\x8\x9\x10\x11\xff";
echo strlen($str),"
"; for ($i=0;$i
$str);$i++) );
}?>
輸出結果:
---------------------- 100
1237
891617
255
php 字元轉義
php中字元轉移函式如下 1 htmlspecialchars和htmlentities 1 htmlspecialchars 將 與 單雙引號 大於和小於號轉換成 html格式 echo htmlspecialchars fd sa fda fds afd fgjhou nbbfd sa fda ...
php中的特殊字元轉義 php特殊字元轉義詳解
html array html username htmlentities clean username ent quotes,utf 8 echo welcome back,複製 小提示htmlspecialchars 函式與htmlentities 函式基本相同,它們的引數定義完全相同,只不過是...
php去除轉義字元 PHP如何去掉轉義
string addslashes string str 返回字串,該字串為了資料庫查詢語句等的需要在某些字元前加上了反斜線。這些字元是單引號 雙引號 反斜線 與 nul null 字元 stripslashes作用相反在處理mysql和get post的資料時,常常要對資料的引號進行轉義操作。ph...