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

时间:2016-11-17 11:59:49

标签: php mysql character-encoding utf

使用mysql和php。

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

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

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

Preaqueu00e7a o forno mu00e9dio (180u00baC).

字符编码有问题。有什么想法来解决它吗?

2 个答案:

答案 0 :(得分:0)

你似乎有两个问题。

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

可见。)

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

Hex 00e7看起来像" Unicode代码点"对于ç,但目前还不清楚如何创建它。

让我们从SELECT col, HEX(col) FROM ...开始查看已存储的内容。还提供SHOW CREATE TABLE。 (Test the data中的更多详情。)

修复Mojibake问题并执行HEX后,开始一个新问题。 (我担心这个帖子会变得太混乱而无法保留。)

答案 1 :(得分:0)

我使用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效果很好。