轉義是指在程式中將特殊字元轉換成機器能夠辨識的形式。在 PHP 中,也存在這樣的轉義。 PHP 轉義透過在字元之前添加反斜線「\」來實現。例如,要將雙引號(")轉義,可以這樣寫:
echo "She said \"Hello\"";
這樣就會在螢幕上輸出:She said "Hello"。
在PHP 中,有很多需要轉義的字元。下面列舉了一些常見的需要轉義的字元及其轉義字元:
需要轉義的字元 | #字元 |
---|---|
單引號 | \' |
\ " | |
\ | |
##\n | |
\r | |
\t |
在使用資料庫的時候,也需要進行轉義。如果不進行轉義,使用者可能會在資料庫中插入惡意程式碼,導致系統被攻擊。 PHP 為我們提供了兩個函數可以進行轉義:mysqli_real_escape_string() 和 addslashes()。
mysqli_real_escape_string() 函數是 PHP 提供的 MySQL 轉義函數,相容性較好,支援多種字元集。 addslashes() 函數是 PHP 的內建函數,轉義字元是固定的,只支援字元集為 ISO-8859-1 的字串。
下面是一個使用mysqli_real_escape_string() 函數的範例:
$mysqli = new mysqli("localhost", "username", "password", "database"); if ($mysqli->connect_errno) { echo "Failed to connect to MySQL: " . $mysqli->connect_error; exit(); } $name = mysqli_real_escape_string($mysqli, $_POST['name']); $email = mysqli_real_escape_string($mysqli, $_POST['email']); $message = mysqli_real_escape_string($mysqli, $_POST['message']); $query = "INSERT INTO messages (name, email, message) VALUES ('$name', '$email', '$message')"; $result = $mysqli->query($query); if ($result === TRUE) { echo "Message sent successfully"; } else { echo "Error: " . $mysqli->error; } $mysqli->close();
在上面的範例中,我們使用mysqli_real_escape_string() 函數來轉義使用者輸入的name、email 和message,以避免SQL 注入攻擊。
除了 MySQL 外,其他資料庫也需要進行轉義。不同的資料庫有不同的轉義方式,需要根據具體情況選擇適合的轉義函數。
總結一下,轉義是寫安全 PHP 程式的重要環節,必須謹慎使用。在輸出字元或向資料庫插入資料時,都需要進行轉義。建議使用 mysqli_real_escape_string() 函數進行轉義,以避免遺漏轉義字元。
以上是PHP轉義是透過什麼實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!