度'°'字符不显示在php json_encode函数中,如何显示?

时间:2013-04-12 06:54:14

标签: php json

我传递像

这样的php数组
[sit_latitude] => 20° 23.298' N

在json_encode()中;和输出就像,

  {"sit_latitude":null}

它显示为null,如何解决这个问题?

我的代码段

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

4 个答案:

答案 0 :(得分:11)

我尝试过并取得成功有点奇怪但是有效,所以让我与你分享。

$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) .'}';

这将解决您的问题

答案 1 :(得分:5)

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

其他常见字符集如Windows-1252也是ASCII的超集,因此如果存在任何非ASCII字符(包括U + 00B0 DEGREE SIGN),这只是一个问题。

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

(在PHP 5.4中,有一个\u00b0标志可以防止这种转义。但是,许多Web服务器仍然具有PHP 5.3或更早版本,并且该标志甚至可以解决有问题的字符U + 2028 LINE SEPARATOR和U + 2029 PARAGRAPH SEPARATOR。可以用两行代码模拟标志,尽管如上所述,你无论如何都不需要。)

答案 2 :(得分:3)

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

将度数传递给\u00f8C,然后用js解码。

答案 3 :(得分:-4)

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