我有一些PHP代碼,它存儲在數據庫的文本框中鍵入的內容。如果我輸入bob's apples
,它將作爲bob's apples
存儲在數據庫中。Mysql存儲報價爲'
可能是什麼問題?
存儲此表的表格具有latin1_swedish_ci的排序規則。
我有一些PHP代碼,它存儲在數據庫的文本框中鍵入的內容。如果我輸入bob's apples
,它將作爲bob's apples
存儲在數據庫中。Mysql存儲報價爲'
可能是什麼問題?
存儲此表的表格具有latin1_swedish_ci的排序規則。
看起來像你的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
實際上該功能或其他類似的功能沒有被使用,但解碼功能是有幫助的。你確定這不是與MySQL整理有關嗎? – 2010-04-18 04:40:34
很確定。打印出插入語句並親自查看。 – 2010-04-18 04:49:56
我們必須看到一些代碼,但似乎很清楚*在輸入階段* something *是HTML轉義的,正如Ollie解釋的那樣,完全是假的。不幸的是,這是PHP作者常見的錯誤。你是否正在使用某種可能會偷偷摸摸地做的框架? – bobince 2010-04-18 09:59:04
函數用htmlspecialchars()與ENT_QUOTES用於Seconde系列參數
htmlspecialchars($a, ENT_QUOTES);
你的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);
爲什麼downvotes ??????????? – 2010-04-19 14:37:24
可能是因爲巨魔看到了你的暱稱。 – Bene 2014-05-30 14:06:23