1

我在 Windows 7 上使用 Wamp server 2.1 和 PHP 5.3.4、Apache 2.2.17、MySql 5.1.53。

httpd.conf:添加默认字符集“iso-8859-1”

php.ini: default_charset = "iso-8859-1"

我正在使用 php mysqli 类在具有 latin1 编码的表和具有 latin1 编码、latin1_swedish_ci 排序规则的列中插入数据。在 php 文件中,我通过元标记将 charset 设置为 ISO-8859-1,我渲染了一个带有 accept-charset="ISO-8859-1" 属性的表单。我使用 mysqli::set_charset 将数据库连接的字符集设置为 latin1,但输入的数据仍然损坏。据我了解,数据是有效的 latin1 字符。

编码:

$dbMain->set_charset('latin1');
$query = "INSERT INTO `table` (" . implode(',', array_keys($data)) . ") VALUES ('" . implode("','", array_values($data)) . "')";
$dbMain->query($query);

数据被破坏:“字符 Ä、Ö、Ü、ä、ö、ü 和 ß。Shop-Produkte für die Elektronik”

当我通过 latin1 连接读取数据时,它给了我垃圾(带问号的黑色菱形)而不是我插入的数据。当我通过 utf8 连接读取数据时,它会显示正确的字符。在 SqlYog(MySql 客户端)中也是如此。如果我运行“SET NAMES latin1”并浏览表格,我会看到 barbage 字符。如果我运行“SET NAMES utf8”并浏览表格,我会看到正确的文本。这里有什么问题?

更新:

我在 MySql 客户端中运行了以下查询:

SET NAMES latin1;
SELECT my_column,HEX(my_column) FROM my_table;

得到了这个结果

|my_column|HEX(my_column)|
--------------------------
|    ß    |     C39F     |    (entered manually from MySql client)
|   �    |       DF     |    (entered from php via latin1 connection)

我的数据库没有cucu了吗?

4

2 回答 2

2

有几件事很重要:

  • 您在从数据库读取/查看数据时使用什么编码?
  • 你是如何从数据库中查看数据的?通过 mySQL 管理员或一些 php 脚本或 html 页面?
  • 那么浏览器中设置了什么编码呢?
  • 你用什么编码保存你的php文件?

你有没有想过编码转换?我想帮助你,因为我花了一些时间了解 latin2 和 utf8 编码(波兰语),但我需要你提供更多信息。

于 2013-04-12T14:27:44.140 回答
0

出色地!保存的值完全没有问题。在这两种情况下,都是检索导致了问题。

对于 MySql 客户端,问题是当我使用 utf8 连接作为客户端的默认连接时,客户端仅显示存储的正确值。可能是客户端的 UI 仅适用于 utf8 编码。

在 HTML 响应的情况下,PHP 文件的编码是 ISO-8859-1,但 .html 模板文件以 UTF-8 编码保存。该网站使用常规解析器来解析模板,因此当它从 UTF-8 文件中获取内容并进行解析时,ISO-8859-1 数据被破坏。将 .html 文件的编码更改为 ISO-8859-1 解决了这个问题。

谢谢大家帮助我。我非常感谢。希望你不要生气

于 2013-04-29T07:20:16.660 回答