Colocando HTML em JSON

Como por título, considera-se uma boa prática colocar HTML em JSON? A razão pela qual eu preciso fazer isso é porque eu gostaria de ter um menu suspenso personalizado onde a lista vem da input do usuário, e o json parece assim:

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

e eu tenho o foreach como seguindo (tenha em mente que esta é uma versão despojada do meu código, a validação está no lugar, mas, por causa desta questão, tirei-os)

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

    Minha preocupação é que talvez haja alguns caracteres especiais que possam quebrar a Cadeia de caracteres JSON. Por favor ajude.

    Você não seria o primeiro a fazê-lo, e certamente não o último.

    Para realmente responder a pergunta, assumindo que você está seguindo o protocolo / padrão e não quebrando (incluindo citações na string sem escaping delas, por exemplo), você deveria estar bem. json_encode faz um ótimo trabalho em tudo isso, mas como o @Kolink mencionado, certifique-se de codificá-lo para o UTF8 primeiro, de outra forma, os caracteres Unicode perdidos ocasionalmente o quebrarão, resultando em saída vazia.

    Além disso, é preferência do programador usá-lo. Alguns o evitam e mantêm a UI na página, outros criam a interface do usuário e deixam o JavaScript soltar-lo – de qualquer forma, é sua chamada e perfeitamente aceitável.

    Não há nada de errado com isso. json_encode evita todos os personagens de qualquer maneira, então a única coisa que você deve ter cuidado é ter certeza de que suas cordas são utf8_encode d.

    Você poderia, com certeza, mas poderia facilmente passar os valores como uma matriz no JSON e colocar o código de renderização HTML no cliente; economizando ciclos de servidor, bytes de largura de banda e mistura de apresentação lógica.