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 编码字符串,因此您必须使用 htmlentitiesutf8_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调试时print_r ,var_dump的区别

PHP中输出 echo print print_r var_dump的区别与比较

递归PHP函数写入外部数组

关于php print_r

PHP中输出字符串(echo,print,printf,print_r和var_dump)的区别转载

Perl 的等价于 PHP 的 print_r() 是啥?