htmlspecialchars($string,ENT_QUOTES) 更好。htmlspecialchars 很像的 htmlentities 函數並不適用中文,因為會連同中文字一起轉義。htmlentities 和 htmlspecialchars 只能防止XSS攻擊,不能防止SQL隱碼攻擊。
$title = htmlspecialchars($_POST['title'], ENT_QUOTES);
$title = filter_var($_POST['title'], FILTER_SANITIZE_SPECIAL_CHARS);
| 名稱 | 功用 |
|---|---|
| FILTER_CALLBACK | option可以讓開發者用自訂的function處理 |
| FILTER_SANITIZE_STRING | 去除標籤或特殊字元(html標籤會直接被消除) |
| FILTER_SANITIZE_ENCODED | 與urlencode()相同,過濾特殊字串 |
| FILTER_SANITIZE_MAGIC_QUOTES | 過濾針對SQL injection做過濾(例如單、雙引號) |
| FILTER_SANITIZE_SPECIAL_CHARS | 針對HTML做encoding,例如<會轉成< |
| FILTER_SANITIZE_EMAIL | 過濾e-mail,刪除e-mail格式不該出現的字元(除了$-_.+!*'{}|^~[]`#%/?@&=和數字),例如a(b)@gmail.com會被過濾成ab@gmail.com |
| FILTER_SANITIZE_URL | 過濾URL,刪除URL格式不該出現的字元 |
| FILTER_SANITIZE_NUMBER_INT | 刪除所有字元,只留下數字與+-符號 |
| FILTER_SANITIZE_NUMBER_FLOAT | 刪除所有字元,只留下數字和+-.,eE |
| FILTER_VALIDATE_INT | 判斷數字是否有在範圍內 |
| FILTER_VALIDATE_BOOLEAN | 判斷布林值,1、true、on、yes都會判斷成true,反之為false,若是這些以外的值會回傳NULL |
| FILTER_VALIDATE_FLOAT | 判斷是否為浮點數 |
| FILTER_VALIDATE_REGEXP | 利用regexp做驗證 |
| FILTER_VALIDATE_URL | URL驗證 |
| FILTER_VALIDATE_EMAIL | e-mail驗證 |
| FILTER_VALIDATE_IP | IP驗證 |
(int) $xxx 或 intval($xxx)即可,會強制把輸入的內容變成數字。filter_var($num, FILTER_SANITIZE_NUMBER_INT) 來過濾,但和 intval 不太一樣,例如:
$num = "123其他文字456";
echo filter_var($num, FILTER_SANITIZE_NUMBER_INT) . "<br>";
echo (int) $num . "<br>";
echo intval($num) . "<br>";
用用 (int) $xxx 或 intval($xxx)會得到 123,但用filter_var() 會得到 123456