6

我正在尝试输出存储在 MySQL 数据库中的产品信息,但它正在写出一些奇怪的字符,例如内部带有问号的菱形。

我认为这可能是编码/UTF8 问题,但我已经指定了我想要的编码:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

这是正确的吗?我应该检查什么?

4

4 回答 4

20

如果只有来自数据库的数据中有奇怪的字符,请确保 MySQL 连接也是 UTF8 使用:

mysql_query("SET NAMES UTF8");

在任何其他查询之前。否则,如果字符也出现在“手写”文件中,请确保文件在编辑器中保存为 UTF-8。您也可以尝试通过 PHP 设置字符集标头:

header('Content-type: text/html; charset=UTF-8');

还要确保您正在查询的表中的所有字段都设置为某些 UTF-8 变体,例如utf8_general_ci.

于 2009-12-15T21:33:12.367 回答
5

我假设你希望结果是 utf8

  • 保存 php 脚本 utf8 编码
  • 确保您的 http 标头(或一些元标记)告诉输出是 utf8
  • MySql 中的所有表都应该是 utf8
  • 最后但同样重要的是,客户端和服务器之间的连接应该是 utf8。(这可以在 php.ini 设置中的某处进行处理,或者通过对 db 进行以下查询:SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'

如果您遵循所有 4 点,您将永远不会遇到编码损坏的任何问题。

于 2009-12-15T23:07:58.967 回答
4

上次我遇到那个麻烦时,解决方案与 Tatu Ulmanen 说的类似,但略有不同......

因此,如果他的解决方案不起作用,请尝试更换

mysql_query("SET NAMES UTF8");

mysql_query("SET NAMES latin1");

我这样说是因为 MySql 中的默认字符集是 latin1,这是大多数时候使用的......

希望有帮助...

于 2009-12-15T22:19:22.150 回答
1

附和大图的话。

这是关于编码的很好的背景读物:每个软件开发人员绝对、肯定必须了解 Unicode 和字符集的绝对最小值(没有借口!)

于 2009-12-15T21:33:25.050 回答