1

我有一个包含一些强调字符的查询结果,例如:

CollectionTitle => Afleuréss

但是当我写一个json文件json_encode($Result_Array)并检索它显示的结果时:

CollectionTitle => NULL  

然后我用array_map()

$res[] = array_map('utf8_encode', $row);

但结果是我:

CollectionTitle => Afleuréss代替 CollectionTitle => Afleuréss

请建议我更好的方法来解决这个问题。

谢谢

4

4 回答 4

2

第二个实际上是正确的。问题是您的浏览器无法检测到编码并且默认为默认值(可能是 ISO-8859-1)。切换您的浏览器编码,您将看到正确的字符出现。

于 2013-04-17T06:33:10.163 回答
1

Add to your HTML head:

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

Note that you should have a proper HTML doctype because browsers default to non utf8. You can do a simple test, like I did, this works:

<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<?php
$title = "Jérôme";
echo $title."<br>";

But the place for the meta tag is in the head tag. The HTML document should look like this:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>An XHTML 1.0 Strict standard template</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>

<body>

<?php
$title = "Jérôme";
echo $title."<br>";
?>

That is standard.

于 2013-04-17T09:59:49.157 回答
1

json_encode仅支持 UTF-8,但您的应用程序的其余部分使用的是 Windows-1252。我不建议使用utf8_encode从 ISO-8859-1 转换为 UTF-8 的方法。这只适用于您 95% 的时间,因为您使用的是 Windows-1252,而不是 ISO-8859-1*。

我不知道您是否可以,但如果可以,您应该切换到 UTF-8,这样您就不需要在任何地方使用这种脆弱的转换代码。

*这可能令人困惑。浏览器实际上不允许您使用 ISO-8859-1,而是将其视为 Windows-1252。与 MySQL 相同,Latin1 表示 Windows-1252。两者都是默认值。utf8_encode/decode当然使用实际ISO-8859-1,所以它在 0x80-0x9F 范围内不兼容。

于 2013-04-17T06:40:38.950 回答
0

在您的第二个示例/步骤中:

$res[] = array_map('utf8_encode', $row);

看起来您正在尝试编码UTF-8不是. ISO-8859-1

您应该检测/知道来自数据库的编码是什么,并将其正确转码UTF-8iconv例如。

作为替代方案,您应该知道:

  • 数据库中的编码是什么?
  • PHP文件的编码是什么?
  • HTML页面中的编码是什么?<meta charset="utf-8">

如果可能的话,请将以上所有内容移至UTF-8...

于 2013-04-17T07:32:38.763 回答