0

我在一个看起来像这样的表中有数据(基于 SQLYog):

(1) µéÁÂÓ ·Óᡧ

但是当正在读取数据的论坛系统在屏幕上显示它时,它看起来像这样:

(2) ต้มยำ ทำแกง</p>

第二个输出是正确的(泰语)。

我正在编写一个脚本,该脚本将提取所有这些数据并将其导入新数据库(MongoDB),但是当我提取数据并回显到浏览器时,我得到的输出类似于上面的第一个 (1)。

我该如何进行转换,以便在插入(或将其输出到浏览器)时像(2)一样正确保存和显示?

我无法输出像 (2) 这样的文本,但我能够通过包含在我的 html 中来使输出看起来像 (1):

<head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> </head>

然后在回显数据时:

echo iconv('latin1', 'utf-8', $string);

我敢肯定这很简单,但我对 unicode 等还不够熟悉,无法解决这个问题!谢谢大佬!

更新

我现在更近了一步。我打了电话:

mysql_query("SET NAMES 'utf8'");

然后能够使用以下命令输出 (1):

echo $string;

所以我猜 MySQL 现在正在通过连接为我将 latin1 转换为 utf8,而不是我必须通过 iconv 在 PHP 中执行此操作。

但是仍然无法将泰文字符输出到浏览器!

4

2 回答 2

0

我设法解决了这个问题。

我从数据库中得到的文本是 windows-874(泰语的代码页)。在我搜索了泰语代码页后,我找到了正确的转换为 utf-8 的路径。一旦我将标题切换为:

header('Content-type: text/html; charset=windows-874');

我能够正确看到泰语字符,所以我再次禁用了标题并使用:

iconv('windows-874', 'UTF-8', $string);

这将 windows-874 转换为 utf-8,即使没有标题或元标记,页面仍能正确显示。

所以......字符集新手的一课 - 找出您的文本可能用什么代码页进行编码,然后尝试从该代码页转换为 utf-8 :)

于 2013-05-01T20:58:46.170 回答
0

您需要确保您的脚本对数据库连接使用 UTF-8 编码,并且您需要确保脚本中所有操作该值的区域都使用对多字节字符安全的操作。最后,如果您在浏览器中显示该值,您需要输出 utf-8 的元标记,就像您似乎已经在做的那样。

于 2013-05-01T19:37:21.000 回答