2010-04-18 31 views
0

我有一些PHP代碼,它存儲在數據庫的文本框中鍵入的內容。如果我輸入bob's apples,它將作爲bob's apples存儲在數據庫中。Mysql存儲報價爲'

可能是什麼問題?

存儲此表的表格具有latin1_swedish_ci的排序規則。

+0

爲什麼downvotes ??????????? – 2010-04-19 14:37:24

+0

可能是因爲巨魔看到了你的暱稱。 – Bene 2014-05-30 14:06:23

回答

5

看起來像你的PHP代碼正在使用htmlentities將特殊字符轉換爲HTML實體。您可以使用功能html_entity_decode取回原始字符串。

$a = "bob's apples"; 
echo htmlentities($a,ENT_QUOTES);        // bob's apples 
echo html_entity_decode(htmlentities($a,ENT_QUOTES),ENT_QUOTES); //bob's apples 
+0

實際上該功能或其他類似的功能沒有被使用,但解碼功能是有幫助的。你確定這不是與MySQL整理有關嗎? – 2010-04-18 04:40:34

+0

很確定。打印出插入語句並親自查看。 – 2010-04-18 04:49:56

+1

我們必須看到一些代碼,但似乎很清楚*在輸入階段* something *是HTML轉義的,正如Ollie解釋的那樣,完全是假的。不幸的是,這是PHP作者常見的錯誤。你是否正在使用某種可能會偷偷摸摸地做的框架? – bobince 2010-04-18 09:59:04

0

函數用htmlspecialchars()與ENT_QUOTES用於Seconde系列參數

htmlspecialchars($a, ENT_QUOTES); 
3

你的HTML轉義字符串(帶有htmlspecialchars()htmlentities())插入到數據庫中,前也將一單引號'其是一個壞主意。您可以使用html_entity_decode()來修復損壞,但最好不要放在首位。

時,你應該逃避HTML是你輸出到瀏覽器通常與SELECT查詢提取的行權前的時間:

做一個谷歌的XSS。

不就是HTML轉義沒有什麼用「加斜線」你應該被插入串入數據庫mysql_real_escape_string()之前做的事情。這是爲了避免SQL注入漏洞。

<?php $row = mysql_fetch_row($result); 
echo htmlspecialchars($row['someField']); // good place to escape HTML. 

<?php $str = htmlspecialchars($_GET['foo']); // bad place to escape HTML. 
$str = mysql_real_escape_string($str); // good place to escape for DB. 
$q = 'INSERT INTO .... VALUES (' . $str . ')'; 
mysql_query($q);