2014-01-09 31 views
0

我的問題是這樣的:我有一個數據庫,其中所有字段都是VARCHAR。有些代表html代碼。此代碼包含字符如◉,⬛︎,◔,➜,★,✦等。這些字符不在HTML上編碼。他們就像你在這裏看到他們。PHP/mySQL - 如何安全地編碼/解碼/轉義/任何需要的字符串插入數據庫之前

該數據庫的其他字段是URL。

我知道我必須轉義這些字符以防止sql注入,並且還必須對它們進行編碼以允許插入數據庫。

htmlspecialchars將不處理這些符號,因爲它們沒有在源碼上編碼。 mysql_escape_string將只能逃避酒吧和雙引號等

我如何真正編碼這個並在PHP轉義,所以我可以在數據庫中插入這些數據,我怎麼讀回他們?

謝謝。

回答

1

使用parameterized queries來防止SQL注入。在html中顯示數據時使用htmlspecialchars()函數。隨着PDO我愛:

$db = new PDO($dsn, $db_user, $db_password); 
$query = 'INSERT INTO table (data1, data2) VALUES (:data1, :data2)'; 
$statement = $db->prepare($query);       
$statement->bindValue(':data1',$data1); 
$statement->bindValue(':data2',$data2) 
$statement->execute(); 
-3

,如果你想刪除定期AZ字母和數字0-9旁邊的所有字符使用的preg_match:當我插入德國串

​​3210
+3

那不是他所問的 – 2014-01-09 00:31:07

2

我發現同樣的問題值轉換爲varchar類型字段,字符串被轉換爲不可讀的字符。

這是UTF-8的問題,我通過以下的事情解決這個問題:

$con = mysqli_connect("localhost","root","root"); 
mysqli_query($con,"SET NAMES 'utf8'"); 

我希望它會在你的數據庫的每一個領域的解決您的問題。

相關問題