4

可能重复:
一直到 UTF-8

搜索高和低的解决方案。在发布问题之前,我已经尝试了很多变体。

什么要求名称在 phpMyAdmin 和 html 页面中显示相同?这甚至可以实现吗?

编辑1:这似乎是一个mysql问题。为什么?因为 php 生成的 html 页面总是会显示正确的字符。此时只有数据库显示不正确。

编辑2:澄清。使用下面的代码片段和图像中显示的原始设置,

  1. 输入 João 并提交
  2. João 显示在数据库中
  3. 重新加载后若昂显示

添加mysqli_query ( $link, 'SET NAMES utf8' )

  1. 输入 João 并提交
  2. João 显示在数据库中
  3. 重新加载后显示 Jo�o

结束编辑 2

在 mysql 数据库中,用 phpMyAdmin 查看: 数据库结构

这些项目出现在数据库中是这样的:(我已经修改了第一个 João 以使其在数据库中显示正确)

2 个同名条目的 phpMyAdmin 视图

并且在带有编码设置的 html 页面中,名称看起来像(顺序相反,修改后有黑色菱形),

出现在 html 页面中

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

我已经尝试将列排序规则更改为 utf8_bin、utf8_general_ci、utf8_unicode_ci,任何一方都没有改变。还将文档 (BBEdit) 从 UTF-8 更改为 UTF-8(带 BOM)、ISO Latin 1 和 Windows Latin 1。其中一些创建了更多的黑色菱形,使问题变得更糟。(在图像中设置为 UTF-8)我什至尝试用编码的等价物 preg_replace ã、é 等。

简短的故事是,在页面上输入了 João(上面的内容类型),João 在数据库中,并且 João 在刷新时来到 html 页面。

寻找想法。谢谢。

4

4 回答 4

7

字符集问题通常很难弄清楚。基本上,您需要确保满足以下所有条件:

  • 数据库连接使用 UTF-8
  • 数据库使用 UTF-8
  • 数据库表中的各个使用 UTF-8
  • 数据实际上以 UTF-8 编码正确存储在数据库内(如果您从错误的来源导入,或者更改了表或列排序规则,则通常不是这种情况)
  • 该网页正在请求UTF-8
  • Apache提供UTF-8

这是处理该列表的一个很好的教程,从头到尾:https ://web.archive.org/web/20110303024445/http://www.bluebox.net/news/2009/07/mysql_encoding/

听起来您的问题特别是您有双重编码(或三重编码)字符,可能来自更改字符集或导入具有错误字符集的已编码数据。在上面的教程中有一个完整的部分来解决这个问题。

于 2012-10-23T16:33:42.913 回答
1

确保您的数据库连接也使用 UTF-8。尝试将下面的行放在页面顶部,

mysql_query("SET NAMES utf8");
于 2012-10-23T15:26:21.993 回答
0

默认 PHP 讨厌 UTF8。确保您使用的是mbstring函数而不是通常的内置字符串函数。

于 2012-10-23T15:42:29.740 回答
0

确保您的 html 页面以及参与 AJAX 数据交换的脚本使用正确的 HTTP 标头提供服务,包括

Content-Type: text/html; charset=UTF-8

由于浏览器可能会忽略 html 端编码设置

于 2012-10-23T15:57:28.713 回答