【问题标题】:Working with special characters (apostrophes) in MySQL and PHP在 MySQL 和 PHP 中使用特殊字符(撇号)
【发布时间】: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 中的。

其他字符,如简单的撇号 ' 只是在数据库中变成 ... 和 � 或类似字符。

如何去掉这些问号字符,保留原始数据?

【问题讨论】:

  • 你应该使用PDOmysqli prepared statements 这将解决这个问题,以及SQL注入!!!
  • 警告:如果您只是学习 PHP,请不要学习过时的 mysql_query 接口。这很糟糕,并且在 PHP 的未来版本中被删除。像PDO is not hard to learn 这样的现代替代品。像PHP The Right Way 这样的指南可以帮助解释最佳实践。始终绝对确定您的用户参数是properly escaped,否则您将遇到严重的SQL injection bugs

标签: php mysql character


【解决方案1】:

addslashes() 是错误的转义函数。您必须使用mysql_real_escape_string(),因为转义取决于所使用的字符集。因此,您最好也使用mysql_set_charset(),它应该替换您的SET NAMES utf8 查询。

总的来说,请注意 mysql 扩展已被弃用,将从 PHP 中删除。请改用 mysqli。

相反的部分也是错误的。无需删除转义-在查询期间“使用”时已将其删除。但是,您必须确保将所有输出到 HTML 的数据正确编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-22
    • 2021-02-15
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多