将 HTML 放入 JSON

Posted

技术标签:

【中文标题】将 HTML 放入 JSON【英文标题】:Putting HTML in JSON 【发布时间】:2012-03-18 13:44:39 【问题描述】:

根据标题, 是否被认为是一种好习惯?我需要这样做的原因是因为我想要一个自定义下拉列表,其中列表来自用户输入,并且 json 看起来像这样:

 listTitle: 'Tasks', listhtml: '<ul><li></li>...</ul>' 

我的 foreach 如下(请记住,这是我的代码的精简版本,验证已经到位,但为了这个问题,我把它们拿出来了)

$list = /** Code to grab 'Tasks' list and its title from mysql **/;
$title = 'Tasks';
$listHtml = '';
foreach($list as $content)  $listHtml .= '<li>' . htmlspecialchars($content, ENT_QUOTES, 'UTF-8') . '</li>'; 

exit(json_encode(array(
   'title' => $title, 'listHtml' => '<ul>' . $listHtml . '</ul>'
)));

我担心可能有一些特殊字符可能会破坏 JSON 字符串。请帮忙。

【问题讨论】:

只是一个字符串。 JSON 支持字符串。即使是其中包含 HTML 的人 ;) - 请参阅 json.org @andreas:将表示与数据分离似乎是 JSON 等格式的要点。您是否打算让其他网站或用户从侧面获取这些数据并在您的网站外部使用它?如果是这样,添加 html 将破坏它。如果不是,如果这是一个您仅用于帮助构建网页的 json 提要,那么这将取决于您。 @bob 嗯?我认为跨域政策适用于您提到的事情?所以除非我愿意在脚本上写回调支持,否则我应该没问题?请赐教 @andreas:跨域策略仅影响您自己网站上XMLHttpRequest 和类似对象的使用,而不影响您的 json 提要/字符串的实际来源。不同的东西。如果您的服务器面向 Internet,并且除非受到服务器设置或用户访问控制的保护,否则您的 json 提要对公众开放。您是否希望外部用户可以随意使用此提要?还是您更喜欢它仅用于帮助动态构建您自己的网站? 嗯,有道理。但这是一个生成的用户列表,因此在服务器上进行会话检查以查看用户是否已登录。感谢您的洞察力:) 【参考方案1】:

你不会是第一个这样做的,当然也不会是最后一个。

要真正回答这个问题,假设您遵循协议/标准并且没有破坏它(例如,包括字符串中的引号而不转义它们),您应该没问题。 json_encode 在这方面做得很好,但正如@Kolink 提到的,请确保先将其编码为 UTF8,否则杂散的 Unicode 字符偶尔会破坏它,导致输出为空。

除此之外,使用它是程序员的偏好。一些避免它并让 UI 在页面上正常工作,另一些则让服务器生成 UI 并让 javascript 直接转储它——无论哪种方式,这都是您的选择,完全可以接受。

【讨论】:

作为后续,Knockout JS 等库允许使用易于使用的模板系统非常轻松地融合 JSON 数据和 UI 集成。【参考方案2】:

这并没有什么问题。 json_encode 无论如何都会转义所有字符,所以你唯一需要注意的是确保你的字符串是utf8_encoded。

【讨论】:

【参考方案3】:

当然可以,但是您可以轻松地将值作为数组传递到 JSON 中,然后将 HTML 呈现代码放入客户端;节省服务器周期、带宽字节和逻辑表示混合。

【讨论】:

以上是关于将 HTML 放入 JSON的主要内容,如果未能解决你的问题,请参考以下文章

将 SQL 数据放入 HTML 表中

TCPDF:如何将图像放入 HTML 块中?

如何将 html 代码放入 Django 中的模板中

将 html 放入一个庞大的数组中

如何将 HTML 数据放入 tcpdf 的标题中?

将 HTML 放入 JSON