PHP的json_encode返回null

9
Array
(
    [sEcho] => 1
    [iTotalRecords] => 7521
    [iTotalDisplayRecords] => 1
    [aaData] => Array
        (
            [0] => Array
                (
                    [0] => Nordic Capital Buys SiC Processing
                    [1] => 2010-06-21/nordic-capital-buys-sic-processing
                    [2] => PEHub Media
                    [3] => Business
                    [4] => completed
                    [5] => Nordic Capital has acquired a 70% stake in SiC Processing AG, a German industrial recycling company, from Frog Capital. No sale price was disclosed.  SiC Processing’s founding family retains a 25% holding, while former lead investor Zouk Ventures retains a 5% stake.

                    [6] => Admin, China, Frog Capital, Germany, Italy, Iyad Omari, Manufacturing, Norway, PEHub Media, Photovoltaic Wafer Manufacturing, Renewable Energy, Semiconductor, United States
                )

        )

)

echo json_encode($myArr);

{"sEcho":"1","iTotalRecords":7521,"iTotalDisplayRecords":"1","aaData":[[" Nordic Capital购买SiC Processing</a></div>"," 2010-06-21/nordic-capital-buys-sic-processing</div>","PEHub Media","Business","已完成",null," 管理员,中国,Frog Capital,德国,意大利,Iyad Omari,制造业,挪威,PEHub Media,光伏晶圆制造,可再生能源,半导体,美国]]}

请注意在completed之后字符串中间的null

这是为什么,我需要进行哪些转义/操作才能对其进行编码?

我已经尝试了addslashes


对我来说可以运行。请检查您的PHP配置,我认为json_*功能可能已被禁用。 - Jani Hartikainen
请提供用于构建示例数组的PHP代码(在发布问题时请仔细检查您的问题 - 提供的示例应该执行您打算执行的操作!) - AllenJB
1
请问能否获取源数组的var_export呢? - Charles
4个回答

24

来自手册:

请注意,如果您尝试编码一个包含非UTF值的数组,则会在生成的JSON字符串中得到null值。您可以使用array_map函数批量编码数组的所有元素:

$encodedArray = array_map(utf8_encode, $myArr);
echo json_encode($encodedArray);

谢谢seengee,太完美了。我之前其实用了array_map(htmlentities...)来解决我的问题,但是你的方法真的救了我一命。 - Dustin Graham
值得注意的是,建议使用 utf8_encode() 不是一个好主意,因为它会盲目地假设输入是 ISO-8859-1。如果你面临这个问题,首先重要的是要弄清楚你的字符集是什么,然后才进行转换(如果你没有处理 ISO-8859-1,http://php.net/iconv 可以帮助你完成第二部分)。 - TML

1

请再次检查我的问题,我已经更新了完整的代码,因为json_encode与数组的其余部分一起工作。 - Lizard
1
在复制和粘贴时,您可能无意中将其放入UTF-8格式中,而原始字符串可能不是这种格式。 - devios1

1

在5.2.13上对我有效。确保您至少使用的是PHP 5.2.0,并且PHP未编译为--disable-json。您还可以检查错误报告(和/或日志记录)是否已启用。


请再次检查我的问题,我已经更新了完整的代码,因为json_encode与数组的其余部分一起工作。 - Lizard

0
较简单的方式是 $store_name = utf8_encode(name_of_varaible),但请确保您的字符集为 ISO-8859-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接