从 mysql table 读取数据时出现奇怪的字符

Strange characters when reading data from mysql table

正在使用 mysql 和 php。

在我的数据库中,我有如下列值。

Preaqueça o forno médio (180ºC).

但是当我使用 php 检索它时,它显示在字符串下方。

Preaqueu00e7a o forno mu00e9dio (180u00baC).

字符编码有问题。有什么解决办法吗?

你好像有两个问题。

çç 的 Mojibake,ºº 的 Mojibake。为此,您需要检查:

可见。)

  • 要存储的字节需要进行 UTF-8 编码。解决这个问题。
  • INSERTing和SELECTing text时的连接需要指定utf8或utf8mb4。解决这个问题。
  • 该列需要声明为 CHARACTER SET utf8(或 utf8mb4)。解决这个问题。
  • HTML 应该以 .
  • 开头

十六进制 00e7 看起来像 ç 的 "Unicode codepoint",但不清楚您是如何创建它的。

让我们从 SELECT col, HEX(col) FROM ... 开始,看看存储了什么。同时提供 SHOW CREATE TABLE。 ( 中有更多详细信息。)

解决 Mojibake 问题并完成 HEX 后,开始新的问题。 (我担心这个线程会变得太乱而无法保留。)

我正在使用 json_encode 来显示 select 查询的输出。那是导致问题的原因。

function my_json_encode($arr)
{
        //convmap since 0x80 char codes so it takes all multibyte codes (above ASCII 127). So such characters are being "hidden" from normal json_encoding
        array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (0x80, 0xffff, 0, 0xffff), 'UTF-8'); });
        return mb_decode_numericentity(json_encode($arr), array (0x80, 0xffff, 0, 0xffff), 'UTF-8');

}

使用此函数而不是默认函数 json_encode.And 它工作得很好。