2010-04-18 54 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);