为什么我的JSON字符串为空?

时间:2014-02-08 11:09:37

标签: php null json

我在PHP中编写了一个代码,以查看JSON字符串输出。但我得到零价值。

<?php

 $l=array();

 $l[] = array('a'=>'@cÐaÐjÔÐ J kf _ÞÒi^ ','b'=>']éÞ[ѯРQtÍ]hà_ , `ËSÐ J heZ Òhi');

 echo $j = json_encode($l);

?>

输出 - :

  [{"a":null,"b":null}] 

为什么JSON输出为空。我期待必须存在字符编码问题。

我希望以下列格式输出。

[{"a":"@cÐaÐjÔÐ J kf _ÞÒi^","b":"]éÞ[ѯРQtÍ]hà_ , `ËSÐ J heZ Òhi"}] 

请帮帮我。请建议我一些解决方案

提前致谢!!!

2 个答案:

答案 0 :(得分:1)

在推送到数组之前可能需要使用utf8_encode()字符串然后json_encode,因为json_encode()仅适用于utf8编码数据

$l=array();

$l[] = array('a'=>utf8_encode('@cÐaÐjÔÐ J kf _ÞÒi^ '),
'b'=>utf8_encode(']éÞ[ѯРQtÍ]hà_ , `ËSÐ J heZ Òhi'));

echo json_encode($l);

好的看起来你的问题并不那么简单,你需要使用

htmlentities( (string) $value, ENT_QUOTES, 'utf-8', FALSE); 

处理这种情况

$array = array("a"=>htmlentities( (string) "@cÐaÐjÔÐ J kf _ÞÒi^ ", ENT_QUOTES, 'utf-8', FALSE),
               "b"=>htmlentities( (string) "]éÞ[ѯРQtÍ]hà_ , `ËSÐ J heZ Òhi", ENT_QUOTES, 'utf-8', FALSE)

             );

$json = json_encode($array);
echo ($json);

点击http://phpfiddle.org/main/code/mh8-7ua

您需要在数组元素中添加上述内容。

答案 1 :(得分:0)

我使用有限的编码重新创建了您描述的行为。

检查php脚本的文件编码。确保将其设置为unicode或utf8(如果可用)。

否则你必须先将你的字符串转换为utf8,就像Abhik在答案中所说的那样。

您的输出将如下所示

[{"a":"@c\u00d0a\u00d0j\u00d4\u00d0 J kf _\u00de\u00d2i^ ",
  "b":"]\u00e9\u00de[\u00d1\u00af\u00d0 Qt\u00cd]h\u00e0_ , `\u00cbS\u00d0 J heZ \u00d2hi"}]

That is working as intended, since ...

  

任何角色都可能被转义。如果角色在基本
中   多语言平面(U + 0000到U + FFFF),然后它可能是
  表示为六个字符的序列:反向固相,然后是
  用小写字母u,后跟四个十六进制数字   编码角色的代码点。十六进制字母A到
  F可以是大写或小写。因此,例如,包含
的字符串   只有一个反向固相字符可以表示为
  “\ u005C”。