最近在對前端表單輸入資料進行處理中,遇到幾個PHP字串處理函數,真心搞不懂作用是什麼,API說的太過於模糊,看不太懂,求大神幫忙解答一下區別和作用:
htmlspecialchars
addslashes
stripslashes
strip_tags
nl2br
mysql_real_escape_string
我就是想將textarea裡的資料insert into進mysql資料庫,使用者可能輸入html等亂七八糟的字串,插入mysql,我應該怎麼處理?
回複內容:
最近在對前端表單輸入資料進行處理中,遇到幾個PHP字串處理函數,真心搞不懂作用是什麼,API說的太過於模糊,看不太懂,求大神幫忙解答一下區別和作用:
htmlspecialchars
addslashes
stripslashes
strip_tags
nl2br
mysql_real_escape_string
我就是想將textarea裡的資料insert into進mysql資料庫,使用者可能輸入html等亂七八糟的字串,插入mysql,我應該怎麼處理?
標準寫法(請忘掉那一堆亂七八糟的函數):
//檢查防止SQL注入的函數function MySQLCheck(&$value){ //去除斜杠(伺服器配置給予的轉義斜杠) if (get_magic_quotes_gpc()) { $value = stripslashes($value); } //如果不是數字則加引號(專業的轉義函數) if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; //樣本用法: //$user = SQLCheck($_POST['user']); //$pwd = SQLCheck($_POST['pwd']); //$sql = "SELECT * FROM users WHERE user = $user AND password = $pwd";}
函數來源(開源庫):https://github.com/MoonLord-LM/MyPHP
另外,新版PHP已經廢棄mysql擴充,推薦用mysqli擴充了,代碼如下:
//檢查防止SQL注入的函數function MySQLCheck(&$value){ global $Connect; //去除斜杠(伺服器配置給予的轉義斜杠) if (get_magic_quotes_gpc()) { $value = stripslashes($value); } //如果不是數字則加引號(專業的轉義函數) if (!is_numeric($value)) { $value = "'" . mysqli_real_escape_string($Connect,$value) . "'"; } return $value; //樣本用法: //$user = SQLCheck($_POST['user']); //$pwd = SQLCheck($_POST['pwd']); //$sql = "SELECT * FROM users WHERE user = $user AND password = $pwd";}
上面的$Connect是資料庫連接。
注意,這兩個函數都是要在串連了MySQL資料庫之後才能執行,否則會有報錯。
另外,前端如果要展示,那麼也要對script等等標籤進行處理,可以用PHP的str_replace函數進行替換,還有
等等。