【问题标题】:Encode accentuated characters in json using php使用php在json中编码重音字符
【发布时间】:2013-04-17 06:30:35
【问题描述】:

我的查询结果包含一些重音字符,例如:

CollectionTitle => Afleuréss

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

CollectionTitle => NULL  

然后我用array_map()

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

但结果是我:

CollectionTitle => Afleuréss 而不是CollectionTitle => Afleuréss

请建议我解决此问题的更好方法。

谢谢

【问题讨论】:

标签: php utf-8 json


【解决方案1】:

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

【讨论】:

  • 声明 UTF-8 对他来说没有意义,因为他的其他数据在 Windows-1252 中。除了改用 UTF-8 或不使用 JSON 之外,没有其他方法可以取胜。
【解决方案2】:

添加到您的 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>";

但是meta标签的位置是在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】:

    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范围内是不兼容的。

    【讨论】:

      【解决方案4】:

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

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

      您似乎正在尝试在UTF-8 中编码不是 ISO-8859-1 的内容。

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2018-09-13
        • 2015-04-03
        • 2020-11-28
        • 1970-01-01
        • 1970-01-01
        • 2016-02-07
        • 1970-01-01
        • 1970-01-01
        • 2011-11-29
        相关资源
        最近更新 更多