Mettendo HTML in JSON

Come per titolo, è considerata una buona pratica inserire HTML in JSON? Il motivo per cui ho bisogno di farlo è che mi piacerebbe avere un menu a discesa personalizzato in cui la lista proviene dall’input dell’utente, e il json sembra così:

{ listTitle: 'Tasks', listHtml: '
  • ...
' }

e ho il foreach come segue (tieni presente che questa è una versione ridotta del mio codice, la validazione è a posto, ma per il gusto di questa domanda li ho eliminati)

 $list = /** Code to grab 'Tasks' list and its title from mysql **/; $title = 'Tasks'; $listHtml = ''; foreach($list as $content) { $listHtml .= '
  • ' . htmlspecialchars($content, ENT_QUOTES, 'UTF-8') . '
  • '; } exit(json_encode(array( 'title' => $title, 'listHtml' => '
      ' . $listHtml . '
    ' )));

    La mia preoccupazione è che potrebbero esserci alcuni caratteri speciali che potrebbero rompere la stringa JSON. Per favore aiuto.

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

    Per rispondere veramente alla domanda, supponendo che tu stia seguendo il protocollo / standard e non lo interrompi (incluse le virgolette nella stringa senza sfuggirle, per esempio) dovresti stare 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 occasionalmente 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.

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

    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.