PHP逸出字元問題
在網上,搜到了很多文章,上面都說:
以單引號為定界符的php字串,支援2個轉義:\\, \'
以雙引號為定界符的php字串,支援8個轉義:\\, \", \r, \n, \t, \$, \[0-7]{1,3}, \x[0-9A-Fa-f]{1,2}
但實際操作中,並不是這樣子,對單引號和雙引號,addshlashes()都會進行轉義,以下例為證,有人意見相左嗎?
以下是測試結果:
$single_quote_str = '\'單引號\'內之 "雙引號" 測試.';
$double_quote_str = "\"雙引號\"內之'單引號'測試.";
單引號測試:
原始輸出字串='單引號'內之 "雙引號" 測試.
轉義字串=\'單引號\'內之 \"雙引號\" 測試.
還原字串='單引號'內之 "雙引號" 測試.
雙引號測試:
原始輸出字串="雙引號"內之'單引號'測試.
轉義字串=\"雙引號\"內之\'單引號\'測試.
還原字串="雙引號"內之'單引號'測試.
分享到: 更多
------解決方案--------------------
你先要明白為什麼會有轉義一說
當用單引號括起的字串中有單引號時,如 'ab'c'
當用雙引號括起的字串中有雙引號時,如 "ab"c"
你說這個字串是到 b 就結束了,還是要到 c 才結束呢?
弄不清了吧?這就是因為'(")二義性造成了歧義
於是為瞭解決這個歧義,引入了轉義的概念。而字元\一般不會出現在本文中,所以就用它作為轉義符
'ab\'c'、"ab\"c" 中 \'、\" 使得引號失去引號的含義,而只被當做普通的字元
\r、 \n、\t 使得字母r、n、t失去了其字母的含義,而被當做 ascii 碼的 斷行符號、換行、定位字元
雖然 \ 在本文裡很少出現,但還是有可能出現的。所以就用 \\ 來使 \ 失去轉義的作用
------解決方案--------------------
string addslashes ( string str )
返回字串,該字串為了資料庫查詢語句等的需要在某些字元前加上了反斜線。這些字元是單引號(')、雙引號(")、反斜線(\)與 NUL(NULL 字元)。