PHP MySQL 数据库奇怪的字符

问题描述 投票:0回答:5

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

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

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

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

php mysql utf
5个回答
20
投票

如果只有来自数据库的数据包含奇怪的字符,请使用以下命令确保 MySQL 连接也是 UTF8:

mysql_query("SET NAMES UTF8");

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

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

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

utf8_general_ci


5
投票

我假设你希望结果采用 utf8 格式

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

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


4
投票

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

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

mysql_query("SET NAMES UTF8");

mysql_query("SET NAMES latin1");

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

希望有帮助...


1
投票

赞同塔图所说的。

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


0
投票

按照这里其他人的说法,如果您使用的是较新的 mysqli,您将在任何其他查询之前使用此方法:

$link = mysqli_connect("localhost", "my_user", "my_password", "my_db");
mysqli_query($link,"SET NAMES UTF8");

如前所述,请确保您正在查询的表中的所有字段都设置为某种 UTF-8 变体,例如

utf8mb4_general_ci

© www.soinside.com 2019 - 2024. All rights reserved.