前言
在上文中,我們使用 「\n」 表示換行,也就是說:echo "\n" 將輸出一個換行符。那如果我們希望原樣輸出\n 怎麼辦呢?
這就是今天要講的主題:轉義
什麼是轉義
在編程中,有大量的「特殊字符」,不僅僅包含前文說的 制表符,還有很多特殊字符,比如我們想輸出一個「"」(雙引號),用這樣的語法 echo """,只會報錯!
我們必須手動告知程序,將某個特殊字符當成普通字符處理,告知的方法就是通過:轉義符。
PS:幾乎所有的程式語言都需要轉義符,而非PHP特有。
轉義符
絕大多數情況下,它是一個「反斜槓」:\,將右側緊鄰的字符轉義成普通字符,用法如下:
echo "\"";中間的雙引號,被當成普通字符輸出。
echo "\\n";這個看起來有點怪,連續兩個\\是什麼意思? 第一個\表示轉義符,將第二個\轉義成普通字符。
HTML中的轉義字符
如果你想在網頁上輸出一個HTML標籤,比如:比如使用轉義字符,但並非 \ 而是:。\>
什麼時候需要用到它?
任何時候,只要你希望原樣輸出「特殊字符」就要使用它。
安全問題
很多時候,特殊字符的不當使用會造成程序報錯,並進一步引發安全問題。
SQL注入
select * from table where name='張三'上面的是很普通的SQL查詢,但如果以 1' or 1='1作為查詢條件呢?
SQL語句變成了
select * from table where name='1' or 1='1'整個SQL語義產生變化,如果這是一條敏感的查詢,比如管理員登陸,那麼就可能造成通用密碼。
這就是最古老的SQL注入:1 or 1,SQL注入類攻擊手法多樣,但是歸根究底就是利用了特殊字符。
xss攻擊
在數據寫入的過程中,將 js 代碼一併寫入,就可以藉此造成xss攻擊,xss一樣利用了特殊字符,所以我們也可以通過合理的轉義來解決此類問題。
常用的轉義函數
轉載自網上的一張表格,我看寫的還算完整就直接借用了。(來自 cnblogs.com)
總結
注意:不要對字符串重複進行轉義,可能會造成意想不到的結果。另外,在任何時候,都不應該相信來自用戶都輸入,這是每個程式設計師上崗第一天就應該收到的提醒。