PHP print_r 有效,但 json_encode 返回空 [重复]
Posted
技术标签:
【中文标题】PHP print_r 有效,但 json_encode 返回空 [重复]【英文标题】:PHP print_r works, but json_encode returns empty [duplicate] 【发布时间】:2016-08-25 19:33:45 【问题描述】:我的 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
)
)
此输出是通过电子邮件查询的结果,以返回产品名称。在这种情况下,如果我将print_r
更改为echo json_encode
,则不会出现任何内容。这让我相信问题与字符集有关,因为结果不是空的,所以我补充说:
$header = "Content-Type: application/json; charset=utf-8";
header($header);
仍然没有运气。我一直在阅读,可能是 json* 函数被禁用的情况,但是,如果我从我的查询中更改电子邮件,它使用print_r
和使用echo json_encode
的json 显示结果非常好。问题的根源,或者任何类似的情况,一定是这个结果的根源。可能是因为结果中的字符 ä 吗?这就是我在标题中添加 utf-8 的原因。
正如我上面所说,如果我更改电子邮件它可以工作,但是当我使用“test@gmail.com”时它只显示 1 个结果而不是 2 个。会不会是结果没有正确放入数组?我认为print_r
不会正确格式化查询结果。
有人知道怎么回事吗?
【问题讨论】:
var_dump($array_1)
的输出是什么? var_dump 总是对调试更有帮助;)
试试$json_string = json_encode($array_1); var_dump($json_string);
两者都做,var_dump($array);然后回显 json_encode($array);没有理由它不起作用。如果函数不存在,您会收到警告/错误,您正在使用该函数不存在。确保使用 error_reporting(E_ALL); 显示所有警告;
问json_last_error
。是的,主要是编码问题。
在 var_dump($json_string)
我得到 bool(false) @F*** N @Brian @Loenix
【参考方案1】:
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 print_r 有效,但 json_encode 返回空 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
PHP中输出 echo print print_r var_dump的区别与比较