【发布时间】:2015-06-22 20:12:47
【问题描述】:
我正在尝试解决从表单收集信息的页面中的问题。在<head> 我们有:
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
一旦连接到数据库,就会有一行:
mysql_query("SET NAMES utf8");
插入变量 $cmets 的字段之一通常带有撇号,因此我们有一行:
$comments= addslashes($comments);
在将其插入数据库之前。
当我们尝试在另一个页面中读取数据库时,我们执行这一行
stripslashes($row[$comments]);
当我们得到一个简单的 ?(问号)时,它实际上是这样存储在 mySQL 中的。
其他字符,如简单的撇号 ' 只是在数据库中变成 ... 和 � 或类似字符。
如何去掉这些问号字符,保留原始数据?
【问题讨论】:
-
你应该使用
PDO或mysqli prepared statements这将解决这个问题,以及SQL注入!!! -
警告:如果您只是学习 PHP,请不要学习过时的
mysql_query接口。这很糟糕,并且在 PHP 的未来版本中被删除。像PDO is not hard to learn 这样的现代替代品。像PHP The Right Way 这样的指南可以帮助解释最佳实践。始终绝对确定您的用户参数是properly escaped,否则您将遇到严重的SQL injection bugs。