将数据发送到数据库时出现字符问题

时间:2012-04-07 07:49:44

标签: php mysql utf-8 character-encoding oscommerce

我遇到瑞典字符(与英文字母不同的字符)以及如何将它们插入数据库的问题。

我使用osCommerce,iso-8859-1在admin和目录页面中都设置为charset。如果我运行SHOW VARIABLES;数据库中的character_setlatin1

来自phpinfo的一些服务器设置:

iconv.input_encoding ISO-8859-1

iconv.internal_encoding ISO-8859-1

iconv.output_encoding ISO-8859-1

根据主机支持页面,Apache默认提供UTF-8中的所有页面,可以通过添加

来更改
AddDefaultCharset ISO-8859-1

.htaccess文件中。

当我去管理员更新产品时,不同输入字段中的所有字符都是从数据库中获取并显示为他们想要的。但是当我更新产品时,所有特殊字符的转换都是这样的:

  • 成为Ã¥
  • ä成为Ã
  • ö成为ö

如果我添加新产品,也会发生同样的情况。

当我使用phpmyadmin查看数据库时,会显示“损坏”字符,因此不仅仅是翻译错误的网页。

我的主持人最近宣布他们会为php做一些更新,所以我认为它与此更新有关。几天前一切都很好。

我不确定我的preios php版本,但现在我有5.2.17而mysql是4.0.27-standard

有人可以帮我解决这个问题并告诉我我需要做什么。

是否有简单的解决方案,我是否需要将数据库和网页转换为utf-8,还是需要做其他事情?

1 个答案:

答案 0 :(得分:1)

听起来网络浏览器正在以UTF-8而不是ISO-8859-1发送表单。或者应用程序(或MySQL客户端)在将文本写入数据库之前将文本转换为UTF-8。您可以通过执行简单的$text来检查echo bin2hex($text);的编码方式。

如果问题出在浏览器上,请设置用于发送表单标签中带有accept-charset属性的表单的字符编码。那就是:

<form action="..." method="POST" accept-charset="ISO-8859-1">
    ....
</form>