json_encode回声一片空白.可能的 utf 8 问题


json_encode echo coming back blank. Possible utf 8 issue?

我不确定如何调试它。我从数据库中得到一个数组,它返回正常,但是当我尝试在其上使用json_encode时,它返回空白。任何帮助,不胜感激。

<?php
header('Content-Type: text/html; charset=utf-8');
$servername = "localhost";
$username = "username";
$password = "password";
mysql_connect($servername, $username, $password) or die(mysql_error());
mysql_select_db("places") or die(mysql_error());
$result = mysql_query("SELECT Location, Latitude, Longitude FROM places WHERE Latitude IS NOT NULL GROUP BY Location, Latitude, Longitude");
$places = array();
while (($row = mysql_fetch_array($result, MYSQL_NUM)) !== false) {
    $places[] = $row;
}
$json = json_encode($places, JSON_UNESCAPED_UNICODE);
echo $json;
?>

在 places [] 中返回的内容的示例为:

Array
(
[0] => Array
    (
        [0] => testPlace1
        [1] => 50.1019
        [2] => -75.0263
    )
[1] => Array
    (
        [0] => testPlace2
        [1] => 130.4834
        [2] => 48.3428
    )
[2] => Array
    (
        [0] => testPlace3
        [1] => 23.3003
        [2] => -48.3201
    )
...
....

这种情况还在继续。有些包含 unicode 字符,这是我的初始字符,所以我在 php 代码中添加了一些东西来提供帮助,但我不确定它是否正确。

问题是你用了两次json_encode。您无法json_encode已经是 json 字符串的内容。

另请记住,这些 mysql 函数已被弃用。我建议你使用PDO。

更新

显然,您在位置中有一些特殊的字母表。您可以通过以下方式将它们编码为 utf8:

$places = array_map(function($place) {
    $place[0] = utf8_encode($place[0]);
    return $place;
}, $places );

至于JSON_UNESCAPED_UNICODE,在你解码json之后,Unicode转义将被映射到相应的UTF-8字符串。因此,您通常不需要它。

如果出现 utf8 问题,您可以使用字符集进行数据库连接

$connection = mysqli_connect($servername, $username, $password);
mysqli_set_charset($connection,'utf8');

你的代码是正确的。只是我已经检查过了。我在上述格式的 http://jsonlint.com/中获得了这种格式的 JSON 输出,它是有效的。

[['"Test1'",'"50.1019'",'"-75.0263'"],['"testPlace2'",'"130.4834'",'"48.3428'"]]

同样,您只需运行代码并在以下位置检查 json 输出:http://jsonlint.com/它可能会对您有所帮助。