度& # 39;& # 176;& # 39;字符不显示在PHP json_encode函数,如何显示这个


Degree '°' character not displaying in php json_encode function, how to display this?

我传入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) .'}';

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

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

这将解决你的问题

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

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

即使字符串是有效的UTF-8,默认情况下,json_encode将输出'u00b0而不是实际的度数符号。这对于使用PHP json_decode或JavaScript JSON的编程式解码来说不是问题。解析JSON十六进制转义序列。

(在PHP 5.4中,有一个JSON_UNESCAPED_UNICODE标志来防止这种转义。然而,许多web服务器仍然使用PHP 5.3或更早的版本,该标志甚至可以对有问题的字符U+2028 LINE SEPARATOR和U+2029 PARAGRAPH SEPARATOR进行转义。可以在两行代码中模拟标志,尽管正如我上面解释的那样,您无论如何都不必这样做。

JSON和转义字符-这篇文章可能会对你有所帮助。

只要通过'u00f8C的度,然后用js解码。

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