Mysql存储引号为'

时间:2010-04-18 04:27:58

标签: php sql mysql character-encoding collation

我有一些PHP代码,用于存储数据库中文本框中输入的内容。如果我输入bob's apples,它将作为bob's apples存储在数据库中。

可能是什么问题?

存储它的表具有latin1_swedish_ci的整理。

3 个答案:

答案 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也将单引号转换为&#039;

htmlspecialchars($a, ENT_QUOTES);