使用mysql_real_escape_string编码错误,返回空字符串

时间:2013-06-13 12:28:47

标签: php mysql character-encoding

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

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

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

解决它的最简单的解决方案是什么?更改db charset?运行编码函数来转换db?

中的条目

1 个答案:

答案 0 :(得分:1)

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

但是我肯定会建议在任何可能的地方使用unicode(并且只能使用unicode);)