我传入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