2012-02-29 15 views
14

Come per titolo, è considerata una buona pratica inserire HTML in JSON? La ragione per cui ho bisogno di fare questo è perché mi piacerebbe avere un menu a discesa personalizzato in cui la lista viene dalla input dell'utente, e il JSON assomiglia così:Inserire HTML in JSON

{ listTitle: 'Tasks', listHtml: '<ul><li></li>...</ul>' } 

e ho la foreach come segue (tenere a mente questo è un messo a nudo giù la versione del mio codice, la convalida è a posto, ma per il bene di questa domanda li ho tirato fuori)

$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>' 
))); 

la mia preoccupazione è che ci potrebbero essere alcuni caratteri speciali che potrebbero rompere la JSON String. Per favore aiuto.

+0

È solo una stringa. Le stringhe sono supportate in JSON. Anche quelli con HTML in esso;) - vedi http://json.org/ – hakre

+0

@andreas: la separazione della presentazione dai dati sembra essere il punto principale di formati come JSON. Intendi consentire ad altri siti web o utenti di recuperare questi dati sul lato e utilizzarli al di fuori del tuo sito web? Se è così, aggiungere in html lo rovinerà. In caso contrario, se si tratta di un feed JSON che si usa solo per aiutare a costruire le tue pagine web, allora spetterà a te. –

+0

@bob Eh? Pensavo che la politica dei domini incrociati fosse in vigore per cose come hai detto tu? Quindi, a meno che non scriva volentieri il supporto callback sulla sceneggiatura, dovrei essere ok? Per favore chiariscimi –

risposta

18

Non saresti il ​​primo a farlo, e certamente non l'ultimo.

Per rispondere veramente alla domanda, supponendo che si stia seguendo il protocollo/standard e non lo si interrompa (comprese le virgolette nella stringa senza sfuggirle, ad esempio) si dovrebbe andare bene. json_encode fa un ottimo lavoro a tutto questo, ma siccome @Kolink ha menzionato, assicurati di codificarlo prima su UTF8 altrimenti i caratteri randagi Unicode si romperanno di tanto in tanto causando un output vuoto.

Oltre a ciò, è preferibile programmarlo. Alcuni lo evitano e mantengono l'interfaccia utente sulla pagina, altri hanno il server che genera l'interfaccia utente e lascia che sia JavaScript a scaricarlo - in ogni caso è la tua chiamata, e perfettamente accettabile.

+0

grazie brad! certamente utile e completa risposta :) –

+0

Come follow-up, librerie come [Knockout JS] (http: // knockoutjs.it /) consentono una facile convergenza dei dati JSON e dell'integrazione dell'interfaccia utente utilizzando un sistema di template facile da usare. –

11

Non c'è niente di sbagliato in questo. json_encode sfugge comunque tutti i caratteri, quindi l'unica cosa che devi fare attenzione è assicurarsi che le tue stringhe siano utf8_encode d.

0

Si potrebbe, certo, ma si potrebbe facilmente passare i valori come una matrice nel JSON e inserire il codice di rendering HTML nel client; risparmiando cicli del server, larghezza di banda e fusione della presentazione logica.

Problemi correlati