【问题标题】:Strange characters when reading data from mysql table从mysql表读取数据时出现奇怪的字符
【发布时间】:2016-11-17 11:59:48
【问题描述】:

我正在使用 mysql 和 php。

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

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

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

Preaqueu00e7a o forno mu00e9dio (180u00baC).

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

【问题讨论】:

  • 确保您的所有系统都使用正确的编码(可能是 UTF)?
  • 共享代码从哪里检索和显示?
  • 您的表配置属于这样的 DEFAULT CHARSET=utf8
  • utf8_unicode_ci 是我的列排序规则
  • 好的,告诉我你的选择块

标签: php mysql character-encoding utf


【解决方案1】:

你似乎有两个问题。

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

可见。)

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

十六进制 00e7 看起来像 ç 的“Unicode 代码点”,但不清楚您是如何创建它的。

让我们从SELECT col, HEX(col) FROM ... 开始,看看存储了什么。同时提供SHOW CREATE TABLE。 (更多细节在Test the data 。)

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

【讨论】:

    【解决方案2】:

    我使用 json_encode 来显示选择查询的输出。这就是问题的根源。

    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。而且效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 2014-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多