在PHP中,當我們想在字符串中插入某些特殊字符或者在表單處理中防止SQL注入攻擊時,就需要使用轉義字符或轉義函數。這篇文章將介紹PHP轉義的相關知識,包括常用的轉義字符和函數,以及應用場景。
在PHP中,使用反斜杠(\)作為轉義字符,例如:
echo "I'm a \"super\" man."; // 輸出結果:I'm a "super" man.
上述代碼中,雙引號前面的反斜杠告訴PHP該雙引號不是字符串結束標記,而是需要輸出的字符。
除了雙引號,還有很多其他字符可以使用轉義字符表示,比如:
echo "This is a tab\t character."; // 輸出結果:This is a tab character. echo "This is a backslash\\ character."; // 輸出結果:This is a backslash\ character. echo "This is a newline\n character."; // 輸出結果:This is a character. echo "This is a carriage return\r character."; // 輸出結果:This is a character. echo "This is a vertical tab\v character."; // 輸出結果:This is a character.
注意到最后一個例子中,輸出結果前面有一些空格,這是因為豎向制表符會導致輸出結果居中對齊,需要注意。
在有些場景中,只使用轉義字符可能無法滿足需求,例如當需要在SQL語句中插入包含單引號的字符串時。這時候就需要使用轉義函數來處理字符串,防止SQL注入攻擊。
PHP中常用的轉義函數有三個:
- addslashes:將字符串中的單引號、雙引號、反斜杠以及NUL字符轉義。
- stripslashes:將字符串中的轉義字符還原。
- mysqli_real_escape_string:MySQL數據庫專用的函數,將字符串中的單引號、雙引號、反斜杠和控制字符都轉義。
以下是一個使用mysqli_real_escape_string函數的例子:
$con = mysqli_connect('localhost', 'username', 'password', 'dbname'); $name = "John's Blog"; $content = "This is John's blog..."; $sql = "INSERT INTO post (name, content) VALUES ('".mysqli_real_escape_string($con, $name)."', '".mysqli_real_escape_string($con, $content)."')"; mysqli_query($con, $sql);
上述代碼中,使用mysqli_real_escape_string函數將$name和$content字符串中的單引號轉義,避免在SQL語句中出現語法錯誤。
總結來說,PHP中轉義字符和轉義函數都是非常有用的工具,既可以處理字符串中的特殊字符,又可以防止SQL注入攻擊。在開發過程中,需要結合具體場景判斷使用何種方式。