2012-02-29 28 views
14

按照标题,将HTML放入JSON中被认为是一种很好的做法吗?我需要做的原因是因为我想有在列表是从用户输入来一个自定义的下拉列表中,并且json看起来像这样:将HTML放入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字符串。请帮忙。

+0

这只是一个字符串。 JSON支持字符串。即使是那些HTML); - 见http://json.org/ – hakre 2012-02-29 02:54:35

+0

@andreas:演示与数据的分离似乎是JSON等格式的主要观点。您是否打算让其他网站或用户在侧面获取这些数据并将其用在您的网站外侧?如果是这样,在html中添加将破坏。如果没有,如果这是一个json feed,你只能用来帮助建立你的网页,那么这将取决于你。 – 2012-02-29 02:56:21

+0

@bob呃?我认为跨域政策适用于您提到的事情?所以除非我愿意在脚本上写回调支持,否则我应该没问题?请赐教 – 2012-02-29 02:58:00

回答

18

你不会是第一个做到这一点,肯定不是最后一次。

要真正回答这个问题,假设你按照协议/标准(字符串中没有逃脱他们包括引号,例如)不破它,你应该罚款。 json_encode在所有这些方面都做得很好,但是正如@Kolink提到的那样,确保先将它编码为UTF8,否则,Unicode字符偶尔会破坏它,导致空输出。

除此之外,它的程序员偏好使用它。有些人会避免它,并保持在页面上的UI工作,其他人有服务器生成用户界面,并让JavaScript只是转储它 - 无论哪种方式,这是你的电话,并完全可以接受。

+0

谢谢布拉德!肯定有帮助和彻底的回答:) – 2012-02-29 03:06:55

+0

作为一个后续,像[Knockout JS](http:// knockoutjs。com /)允许使用易于使用的模板系统轻松实现JSON数据和UI集成的融合。 – 2012-07-26 15:17:10

11

没有什么不妥的地方。 json_encode反正所有字符都逃脱了,所以你唯一要提防的就是确保你的字符串是utf8_encode d。

0

你可以,当然,但你可以很容易地传递价值观作为JSON数组,并把HTML渲染代码在客户端;节省您的服务器周期,带宽字节和逻辑呈现混合。