【问题标题】:Degree '°' character not displaying in php json_encode function, how to display this?php json_encode 函数中未显示度数“°”字符,如何显示?
【发布时间】:2013-04-12 06:54:13
【问题描述】:

我像传递php数组

[sit_latitude] => 20° 23.298' N

内部 json_encode();和输出就像,

  {"sit_latitude":null}

显示为空,如何解决?

我的代码sn-p

...
$stmt->bindParam("id", $_GET[id]);
$stmt->execute();
$employee = $stmt->fetchObject();
$dbh = null;
echo '{"item":'. json_encode($employee) .'}';

【问题讨论】:

  • 请贴出真实的php代码和你的locale配置。
  • 我的猜测是你的文件没有保存为 UTF-8。

标签: php json


【解决方案1】:

我尝试并成功的方法有点奇怪,但有效,所以让我与你分享。

$latitude = json_encode(utf8_encode($emplyoee['sit_latitude']));
$longitude = json_encode(utf8_encode($employee['sit_longitude']));

   $emplyoee['sit_latitude'] = $latitude;
    $emplyoee['sit_longitude'] = $longitude;

现在通过像

echo '{"item":'. json_encode($employee) .'}';

这会解决你的问题

【讨论】:

    【解决方案2】:

    json_encode 假定其输入中的字符串是有效的UTF-8(请记住,PHP 字符串是字节序列,而不是 Unicode 代码点序列)。如果您的文本编辑器未设置为使用该编码(并且您尚未在双引号字符串中使用诸如\xc2\xb0 之类的十六进制转义码手动生成UTF-8),则该字符串将被编码为null(因为它不是有效的 UTF-8)。

    Windows-1252 等其他常见字符集也是 ASCII 的超集,因此只有在存在任何非 ASCII 字符(包括 U+00B0 度数符号)时才会出现问题。

    即使字符串是有效的 UTF-8,默认情况下,json_encode 也会输出\u00b0,而不是实际的度数符号。这对于使用 PHP json_decode 或 JavaScript JSON.parse 的程序解码来说不是问题,它们可以理解 JSON 十六进制转义序列。

    (在 PHP 5.4 中,有一个 JSON_UNESCAPED_UNICODE 标志来防止这种转义。但是,许多 Web 服务器仍然有 PHP 5.3 或更早版本,并且该标志甚至可以取消转义有问题的字符 U+2028 LINE SEPARATOR 和 U+2029 PARAGRAPH SEPARATOR。可以在两行代码中模拟标志,尽管正如我在上面解释的那样,你不必这样做。)

    【讨论】:

      【解决方案3】:

      JSON and escaping characters - 这篇文章可能对你有所帮助。

      只需将学位传递为\u00f8C,然后用js解码即可。

      【讨论】:

        【解决方案4】:

        你可以试试htmlspecialchars()函数http://php.net/manual/en/function.htmlspecialchars.php

        【讨论】:

        • 请注意 JSON 不是 HTML。
        • htmlspecialchars 根本不会转义度数符号,因此无济于事。事实上,在 PHP 5.4 安装中,该函数甚至可能为询问者返回一个空字符串(因为 UTF-8 无效)。
        猜你喜欢
        • 2019-06-01
        • 2019-07-15
        • 1970-01-01
        • 2015-01-06
        • 1970-01-01
        • 1970-01-01
        • 2017-10-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多