【问题标题】:Encoding error with mysql_real_escape_string, returns empty stringmysql_real_escape_string 编码错误,返回空字符串
【发布时间】:2013-06-09 20:08:41
【问题描述】:

场景:用于编辑产品详细信息的 html 文档编码为 ISO-8859-1,并将 POST 数据发送到 PHP 文件(也编码为 ISO-8859-1)。该 PHP 文件又具有 mysql_real_escape_string 清理输入的函数。数据库/mysql 服务器字符集是 UTF-8。问题是当 POST 字符串中包含斯堪的纳维亚字母 (ä,ö,å) 时,mysql_real_escape_string 返回一个空字符串。

我试图用 utf8_encode/decode 覆盖它,但它不起作用。

现在,如果我将 html&php 文件更改为使用 UTF-8,保存工作正常(如预期的那样),但之前保存的所有产品数据看起来都已损坏,并且有数千个产品行。

什么是最简单的解决方案?更改数据库字符集?运行编码函数来转换数据库中的条目?

【问题讨论】:

  • “被编码为 ISO-8859-1”——为什么?现在已经不是 1990 年代了。
  • 请注意,mysql_xxx() 函数已被弃用。我建议您切换代码以使用较新的 PDO 或 mysqli 库。
  • 代码库实际上来自 90 年代。爱它。

标签: php mysql character-encoding


【解决方案1】:

mysql_real_escape_string 考虑 current 连接字符集。如果在调用 mysql_real_escape_string 之前将连接显式设置为 UTF-8,则 ISO-8859-1 脚本应该可以工作(在使用 mysql_real_escape_string 之前查询“SET NAMES 'utf8'”)

但可以肯定的是,我始终建议尽可能使用 unicode(并且仅使用 unicode);)

【讨论】:

    猜你喜欢
    • 2012-05-07
    • 2013-04-13
    • 2015-07-07
    • 1970-01-01
    • 2011-04-23
    • 2013-02-18
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    相关资源
    最近更新 更多