【问题标题】:UTF-8 and ISO-8859-1: Why does it work for the most of the time and why sometimes not?UTF-8 和 ISO-8859-1:为什么它大部分时间都有效,为什么有时不有效?
【发布时间】:2011-11-23 18:19:34
【问题描述】:

我有一个 osCommerce 2.2 MST,其中有一些自定义添加。 osCommerce 本身在 ISO-8859-1 中。该添加在 MySQL 数据库中有一个表,该表现在位于 utf8_general_ci 中(其他都在 latin1_swedish_ci 中)。我调用的 php 文件输出

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

正如我之前提到的,来自数据库的数据是 UTF-8 格式的。但是像 ö,ä,ü 这样的字母是正确显示的。怎么会这样?应该没有utf8_decode。但是字母 č 显示为 ?。我直接把它作为结果数组。如果我使用 phpmyadmin 进行查询,则显示正确。

我设法正确显示了所有字母(仅在脚本的一部分中)。这是我做的

mysql_query("SET NAMES 'utf8'"); 

在我还添加的 php-script 中

header('content-type: text/html; charset=utf-8');
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">

但随后出现了其他问题。

我想知道为什么 UTF-8 中的数据在不应该显示时“正确”显示。以及如何正确显示字母 č?

我觉得这个系统相当复杂。我在哪里以及如何查看这里有什么问题?

【问题讨论】:

标签: php mysql encoding utf-8 iso-8859-1


【解决方案1】:

我不知道您的数据经过的编码/解码顺序,但是像 ö、ä 和 ü 这样的字母是正确的,而 č 不正确的原因是 ö、ä 和 ü 可以是以 ISO-8859-1 编码,但 č 不能。您需要在 HTML 中使用 UTF-8 而不是 ISO-8859-1 才能显示 č。

【讨论】:

  • 我早就试过了,但是没用。我仍然得到?。但我也认为你是对的,因为 č 不在 ISO-8859-1 的字符集中。问题是这是在哪里定义的?我可以添加标题代码,但 ö 和 č 不再起作用。我使用SET NAMES 'utf8' 编辑客户端连接,但其他许多事情都不起作用。是否可以在不更改所有查询的客户端连接的情况下执行此操作?是否可以仅针对一个查询执行此操作?
  • 如何确保我的数据在数据库中正确存储为 UTF-8?如果我使用 phpmyadmin 进行查询,一切都会正确显示。 phpMyAdmin 也使用&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8" /&gt; 所以我认为数据是正确的。
  • 如果唯一出现问题的字符是 č,那么您可以将生成的 HTML 中出现的每个字符替换为字符转义序列:&amp;#269; 或 &amp;#x10D;。 (即使有多个字符出现问题,如果没有太多,这可能是最简单的方法。)
  • 但是我怎么知道它是不是一个č?查询的结果给了我一个?,这可能就是一切......
  • @testing - 那么,唯一的出路就是使用 UTF-8 并找出 HTML 编码为 ISO-8859-1 的原因。也许更新您的问题以显示生成文档的实际代码。
猜你喜欢
  • 2020-11-22
  • 2015-07-07
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
相关资源
最近更新 更多