我使用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
答案 0 :(得分:4)
当您使用print_r
显示JSON解码对象的内容时,您在浏览器中看到的内容是这样的:
stdClass对象([array] =&gt; stdClass对象([id] =&gt; 1 [title] =&gt;标题[short_title] =&gt; abcd [description] =&gt; < / p>
但是,对象的有效内容(没有浏览器解释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>
标签来实现,这些标签会在显示时格式化数据。它对我有用。