2012-02-29 128 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渲染代碼在客戶端;節省您的服務器週期,帶寬字節和邏輯呈現混合。