将JSON解码为PHP数组时某些数据丢失

时间:2018-08-09 04:50:33

标签: php arrays json

我可以在PHP中解码JSON到数组,但是解码到数组时JSON中的某些数据会消失。

这是我的JSON文件

[
  {
    "name": "Games1",
    "price": "€ 25.53",
    "platform": "<span class=\"platform battle-net\"></span>",
    "region": "GLOBAL",
    "url": "localhost"
  },
  {
    "name": "Games2",
    "price": "€ 24.99",
    "platform": "<span class=\"platform xbox-live\"></span>",
    "region": "GLOBAL",
    "url": "localhost"
  }
]

这是我的php代码

$data = file_get_contents("game.json");
for ($i = 0; $i <= 31; ++$i) { 
    $data = str_replace(chr($i), "", $data); 
}

$data = str_replace(chr(127), "", $data);
if (0 === strpos(bin2hex($data), 'efbbbf')) {
   $data = substr($data, 3);
}

$data = json_decode($data,true);
print_r($data);

我的结果来自print_r($ data);

    Array ( [0] => Array ( [name] => Games1 [price] => € 25.53 [platform] => [region] => GLOBAL [url] => localhost ) 
[1] => Array ( [name] => Games2 [price] => € 24.99 [platform] => [region] => GLOBAL [url] => localhost ) )

我在Platform中的价值消失了。有人知道是什么问题吗?

2 个答案:

答案 0 :(得分:4)

您的JSON包含HTML标记,当浏览器显示print_r()的结果时,这些标记将被浏览器解释。使用浏览器的“查看源代码”命令查看原始输出,您应该会看到跨度。

您还可以使用htmlentities()将它们转换为转义字符,浏览器将按原样显示。

$output = print_r($data, true);
echo "<pre>" . htmlentities($output, ENT_COMPAT) . "</pre>";

使用<pre>也会保留格式。

答案 1 :(得分:-1)

为了将HTML保留在JSON中,您必须遵循多个规则:

        
  1.         转义引号         <span class=\"class-name\"><\/span>     
  2.     
  3. 在结束标记<\/span>中转义正斜杠
  4.     
  5. 在自闭合标签中,在斜杠和右括号之间留一个空格。
            <img ... />     
  6.     
  7.         确保像这样编码特殊字符实体:         &euro;     

此外,您可以避免重复 <span>标签,并像这样存储它们的类名:"platform": "battle-net","platform": "xbox-live",