使用php在json中编码强调字符

时间:2013-04-17 06:30:35

标签: php utf-8 json

我的查询结果包含一些突出的字符,如:

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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

*这可能令人困惑。浏览器do not actually allow you to use ISO-8859-1而是将其视为Windows-1252。与MySQL相同,Latin1表示Windows-1252。两者都是默认值。 utf8_encode/decode当然使用实际ISO-8859-1,因此它在0x80-0x9F范围内不兼容。

答案 2 :(得分:1)

添加到您的HTML头:

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

请注意,您应该拥有正确的HTML文档类型,因为浏览器默认为非utf8。你可以做一个简单的测试,就像我一样,这有用:

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

但元标记的位置在head标记中。 HTML文档应如下所示:

<!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>";
?>

    这是标准的。

答案 3 :(得分:0)

在你的第二个例子/步骤中:

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

看起来您正试图在UTF-8中编码 ISO-8859-1

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

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

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

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