PHP轉義字元

2021-07-24 04:06:37 字數 4024 閱讀 4529

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...