如何在 PHP 中对 HTML 进行 JSON 编码?

Ale*_*x K 4 javascript php ajax jquery json

我正在使用 AJAX 和 PHP 创建一个帖子并立即显示它。我的 php 代码可以创建帖子,但我在执行 json 编码以显示刚刚创建的帖子时遇到问题。像这样编码 html 似乎在每个 / 之前添加一个 \ 导致 html 以一种奇怪的方式中断和显示。(我使用的是 json 编码,因为在出​​现错误的情况下,我需要一个变量来知道它是否是一个错误,并在与帖子不同的地方显示错误)

这是我要编码的内容

$data = "<article class='post'><div class='post-head cf'>
         <a class='userpic' href=''><img src='$userpic' alt='".$rowuser['username']."'></a>
         <a href='' class='username'>".$rowuser['username']."</a></div>
         <img src='users/user_".$rowuser['user_id']."/posts/".$row['image']."' alt=''>
         <div class='post-body'>
         <div class='post-options'>
         <a class='likes' href=''>156 likes</a>
         </div>
         <p><a class='username' href=''>".$rowuser['username']."</a>".$row['body']."</p>
         <hr /><div class='cf'>
         <a class='like hide-text' href='javascript:;'>Like This Post</a>
         <form action='' class='comment'>
         <input type='text' placeholder='Add a comment'></form></div>
         </div></article>";

echo json_encode($data);
Run Code Online (Sandbox Code Playgroud)

HPi*_*rce 7

像这样编码 html 似乎在每个 / 之前添加一个 \ 导致 html 中断

PHP 在编码时会转义斜杠。这可以通过JSON_UNESCAPED_SLASHES在调用时添加一个标志来防止json_encode()

$data = "<html></html>";

$escaped = json_encode($data);
// string(16) ""<html><\/html>""
var_dump($escaped);

$unescaped = json_encode($data, JSON_UNESCAPED_SLASHES);
// string(15) ""<html></html>""
var_dump($unescaped);
Run Code Online (Sandbox Code Playgroud)