0

场景:用于编辑产品详细信息的 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,保存工作正常(如预期的那样),但之前保存的所有产品数据看起来都已损坏,并且有数千个产品行。

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

4

1 回答 1

1

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

但可以肯定的是,我总是建议尽可能使用 unicode(并且只有 unicode);)

于 2013-06-13T13:09:20.557 回答