PHP print_r 有效,但 json_encode returns 为空
PHP print_r works, but json_encode returns empty
我的 php 代码如下所示:
$header = "Content-Type: application/json";
header($header);
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * ...";
$result = $conn->query($sql);
$array_1 = array();
if ($result->num_rows > 0) {
// output data as array
while($row = $result->fetch_assoc()) {
array_push($array_1, $row);
}
}
$conn->close();
print_r($array_1);
这给了我以下输出:
Array
(
[0] => Array
(
[user_email] => test@gmail.com
[order_item_name] => Abonnement
)
[1] => Array
(
[user_email] => test@gmail.com
[order_item_name] => Verlängerung
)
)
此输出是通过电子邮件查询的结果,以便 return 产品名称。在这种情况下,如果我将 print_r
更改为 echo json_encode
,则不会出现任何内容。这让我相信问题与字符集有关,因为结果不为空,所以我添加了:
$header = "Content-Type: application/json; charset=utf-8";
header($header);
仍然没有运气。我一直在读到 json* 功能可能被禁用的情况,但是,如果我更改查询中的电子邮件,它会使用 print_r
和 [=39= 显示上述结果] 使用 echo json_encode
完全没问题。它必须来自这个结果,问题的根源,或任何类似的场景。可能是因为结果中的 ä 字符?这就是为什么我在 header.
中添加了 utf-8
正如我上面所说,如果我更改电子邮件,它会起作用,但当我使用 "test@gmail.com" 时,它只显示 1 个结果而不是 2 个。会不会是结果没有正确放入数组?我相信没有 print_r
正确格式化查询结果。
有人知道这是怎么回事吗?
json_encode 仅支持 UTF-8 编码字符串,因此您必须使用 htmlentities
或 utf8_encode
对 order_item_name
值进行编码
foreach($array1 as &$v) {
$v['order_item_name'] = utf8_encode($v['order_item_name']);
}
print json_encode($array1);
有关详细信息,请参阅 problems with german umlauts in php json_encode
我的 php 代码如下所示:
$header = "Content-Type: application/json";
header($header);
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * ...";
$result = $conn->query($sql);
$array_1 = array();
if ($result->num_rows > 0) {
// output data as array
while($row = $result->fetch_assoc()) {
array_push($array_1, $row);
}
}
$conn->close();
print_r($array_1);
这给了我以下输出:
Array
(
[0] => Array
(
[user_email] => test@gmail.com
[order_item_name] => Abonnement
)
[1] => Array
(
[user_email] => test@gmail.com
[order_item_name] => Verlängerung
)
)
此输出是通过电子邮件查询的结果,以便 return 产品名称。在这种情况下,如果我将 print_r
更改为 echo json_encode
,则不会出现任何内容。这让我相信问题与字符集有关,因为结果不为空,所以我添加了:
$header = "Content-Type: application/json; charset=utf-8";
header($header);
仍然没有运气。我一直在读到 json* 功能可能被禁用的情况,但是,如果我更改查询中的电子邮件,它会使用 print_r
和 [=39= 显示上述结果] 使用 echo json_encode
完全没问题。它必须来自这个结果,问题的根源,或任何类似的场景。可能是因为结果中的 ä 字符?这就是为什么我在 header.
正如我上面所说,如果我更改电子邮件,它会起作用,但当我使用 "test@gmail.com" 时,它只显示 1 个结果而不是 2 个。会不会是结果没有正确放入数组?我相信没有 print_r
正确格式化查询结果。
有人知道这是怎么回事吗?
json_encode 仅支持 UTF-8 编码字符串,因此您必须使用 htmlentities
或 utf8_encode
order_item_name
值进行编码
foreach($array1 as &$v) {
$v['order_item_name'] = utf8_encode($v['order_item_name']);
}
print json_encode($array1);
有关详细信息,请参阅 problems with german umlauts in php json_encode