2012-04-07 79 views
1

我遇到了瑞典语字符(与英语字母表不同)的问题,以及它们如何插入到数据库中。将字符发送到数据库时发生字符问题

我使用osCommerce,iso-8859-1在管理员和编目页面都设置为字符集。如果我运行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文件。

当我去管理员更新产品在不同的输入字段中的所有字符ar从数据库中传递出来,并显示为他们认为。但是,当我更新产品的所有特殊字符被转换这样的:

  • A成为A¥
  • A成为澶
  • ö成为ö

同样的情况,如果我添加一种新产品。

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

我的主机最近annoncet说他们会为php做一些更新,所以我认为它与这个更新有关。这一切在几天前都运行良好。

我不知道我的previos PHP版本,但现在我有5.2.17和MySQL 4.0.27是标准

有人能帮助我在这件事情,并告诉我什么,我需要做的。

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

回答

1

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

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

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

感谢您的回复。如果没有人做任何事情,问题就会消失。所以这都是诡计。 但我发现你的答案很有趣,如果再次出现这个问题,我会尽力确认。 – 2012-04-19 09:49:52

+0

我想它可能很难重现,因为问题可能高度取决于浏览器版本和修补级别 – Joni 2012-04-19 10:02:31