Подтвердить что ты не робот

Помещение 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. Пожалуйста, помогите.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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