12

我像传递 php 数组

[sit_latitude] => 20° 23.298' N

里面 json_encode(); 输出就像,

  {"sit_latitude":null}

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

我的代码片段

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

4 回答 4

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

这将解决您的问题

于 2013-04-12T11:51:16.900 回答
5

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

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

即使字符串是有效的 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。可以用两行代码模拟标志,尽管正如我上面解释的那样,无论如何您都不必这样做。)

于 2013-04-12T07:10:47.403 回答
4

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

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

于 2013-04-12T07:02:37.157 回答
-4

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

于 2013-04-12T07:23:45.663 回答