我有一些PHP代码,用于存储数据库中文本框中输入的内容。如果我输入bob's apples
,它将作为bob's apples
存储在数据库中。
可能是什么问题?
存储它的表具有latin1_swedish_ci的整理。
答案 0 :(得分: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
答案 1 :(得分:3)
在插入数据库之前,您的HTML转义字符串(使用htmlspecialchars()
或htmlentities()
),这是一个坏主意。您可以使用html_entity_decode()
来修复损坏,但最好不要在第一时间进行修复。
在您通常使用SELECT查询中提取的行输出到浏览器之前,您应该转义HTML的时间是正确的:
使用Google for XSS。
在使用mysql_real_escape_string()
将字符串插入数据库之前,HTML转义与“应该应该做的”添加斜杠“并不相关。这是为了避免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);
答案 2 :(得分:0)
第二个参数的函数htmlspecialchars()和ENT_QUOTES也将单引号转换为'
htmlspecialchars($a, ENT_QUOTES);