从 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 它工作得很好。
正在使用 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 它工作得很好。