php json_decode删除html标签

时间:2014-01-11 05:36:06

标签: php json

我使用php json_decode解析API响应,然后使用json_encode将响应发送给客户端。

在第三方API调用中,我收到JSON响应,其中有一个键值具有html标记和html内容。当我打印那些数据时,我可以看到那些标签,但是在json_decode之后,我看不到那些标签,所以我无法保持这些标签的完好无损。我希望html内容能够直接进入数据库[完全没有任何变化]。

$result = curlGetWithHeaders("API URL", "Parameters for that URL");

$data = json_decode($result);

所以在$result我可以看到html标签但不能在$data中看到。 var_dump($data)表示它是string

响应是= {"array":{"id":1,"title":"Title","short_title":"abcd","description":"<ul><li>0</li><li>A</li><li>B</li><li>C</li><li>D</li>"}}

并且在使用json_decode之后我将描述描述为pasred html。

deals] => Array ( [0] => stdClass Object ( [deal] => stdClass Object ( [id] => 1 [title] => title [short_title] => abcd [description] => 0 • A • B • C

5 个答案:

答案 0 :(得分:4)

当您使用print_r显示JSON解码对象的内容时,您在浏览器中看到的内容是这样的:

stdClass对象([array] =&gt; stdClass对象([id] =&gt; 1 [title] =&gt;标题[short_title] =&gt; abcd [description] =&gt; < / p>

  • 0
  • A
  • <强> C
  • d

但是,对象的有效内容(没有浏览器解释HTML标记)是这样的:

stdClass Object
(
  [array] => stdClass Object
    (
      [id] => 1
      [title] => Title
      [short_title] => abcd
      [description] => <ul><li>0</li><li>A</li><li>B</li><li>C</li><li>D</li>
    )
)

如果您要求浏览器显示页面来源,您可以清楚地看到它。

您的description字段包含一个恰好是HTML的纯字符串,这就是全部。

如果你想在没有任何修改的情况下将JSON解码的数据存储在你的数据库中,那么, 什么都不做 ,你会得到你想要的

现在,如果要在浏览器中显示实际的HTML代码,则必须转义HTML特殊字符,如下所示:

echo htmlentities (print_r (json_decode ($json), true));

请注意,您应首先获取print_r结果,然后才转义HTML。

答案 1 :(得分:1)

不确定是否有帮助,但......

$p = '<p> This is some text</p>';

$j = json_encode(urlencode($p));

print_r($j);

echo '<br>';

$jd = json_decode(urldecode($j));

print_r($jd);

答案 2 :(得分:1)

使用htmlspecialchars()函数首先编码数据

并使用htmlspecialchars_decode()函数返回结果

  <?php

   $result = htmlspecialchars({"array":{"id":1,"title":"Title","short_title":"abcd","description":"<ul><li>0</li><li>A</li><li>B</li><li>C</li><li>D</li>"}});

使用它,何时想要回复html内容

htmlspecialchars_decode()获取html内容

答案 3 :(得分:1)

$result = '{"array":{"id":1,"title":"Title","short_title":"abcd","description":"<ul><li>0</li><li>A</li><li>B</li><li>C</li><li>D</li>"}}';
$data = json_decode($result);
print "<pre>";
print_r($data);
print "</pre>";  

这里你的json字符串已经在数组中转换,其中“description”包含了html标签。使用 print_r ,你可以看到html标签,因为它被浏览器解释,你会看到html将生成的结果。

现在,如果你想用HTML推文,你可以使用 htmlentities ,如下所示。

print htmlentities($data->array->description);    

<强>输出:

<ul><li>0</li><li>A</li><li>B</li><li>C</li><li>D</li>

答案 4 :(得分:0)

不完全是我的问题的答案,但它可以帮助某人,无论我在DB中存储什么都是完美的。问题在于显示它。所以现在我可以使用<pre></pre>标签来实现,这些标签会在显示时格式化数据。它对我有用。