Помещение HTML в JSON

В соответствии с заголовком, считается ли это хорошей практикой поместить HTML в JSON? Причина, по которой мне нужно сделать это, – это то, что я хотел бы иметь настраиваемое раскрывающееся меню, в котором список поступает с пользовательского ввода, а 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. Пожалуйста помоги.

Вы бы не первыми сделали это, и, конечно, не последнее.

Чтобы действительно ответить на вопрос, предполагая, что вы следуете протоколу / стандарту и не нарушаете его (включая кавычки в строке, не избегая их, например), вы должны быть в порядке. json_encode отлично справляется с этим, но, как сказал @Kolink, убедитесь, что вы кодируете его в UTF8, в противном случае бродячие символы Unicode будут иногда прерывать его, что приведет к пустым выводам.

Помимо этого, программист предпочитает использовать его. Некоторые избегают этого и поддерживают работу пользовательского интерфейса на странице, другие имеют сервер, генерирующий пользовательский интерфейс, и пусть JavaScript просто сбрасывает его – в любом случае это ваш вызов и совершенно приемлемо.

В этом нет ничего плохого. json_encode все равно экранирует все символы, поэтому вам нужно только остерегаться, чтобы ваши строки были utf8_encode d.

Вы могли бы, конечно, но вы могли бы так же легко передать значения как массив в JSON и поместить код визуализации HTML в клиенте; сохранение циклов сервера, байтов пропускной способности и смешения логических презентаций.