2012-02-29 15 views
14

Co do tytułu, czy dobrą praktyką jest umieszczanie kodu HTML w JSON? Powodem muszę to zrobić, ponieważ chciałbym mieć niestandardową listę rozwijaną, gdzie lista jest pochodzący z danych wprowadzonych przez użytkownika, a json wygląda tak:Umieszczanie kodu HTML w JSON

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

i mam foreach jako następujące (utrzymanie na uwadze, że jest to okrojona wersja mojego kodu, sprawdzanie poprawności jest na miejscu, ale ze względu na to pytanie wziąłem je)

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

moim zmartwieniem jest to, że nie mogą być pewne znaki specjalne, które mogłyby przełamać Ciąg JSON. Proszę pomóż.

+0

To tylko ciąg. Ciągi są obsługiwane w JSON. Nawet ci, którzy mają w sobie HTML;) - zobacz http://json.org/ – hakre

+0

@andreas: separacja prezentacji od danych wydaje się być głównym punktem formatów takich jak JSON. Czy zamierzasz pozwolić innym stronom lub użytkownikom pobrać te dane na bok i użyć go _ na odwrót od swojej witryny? Jeśli tak, dodanie w html zepsuje to. Jeśli nie, jeśli jest to plik json, którego używasz tylko do budowania stron internetowych, to od Ciebie zależy. –

+0

@ bob Eh? Myślałem, że w przypadku takich rzeczy, o których wspomniałeś, obowiązują zasady dotyczące domen? Więc jeśli nie będę ochoczo pisać wsparcia oddzwonienia na skrypcie, powinienem być w porządku? Proszę oświecić mnie –

Odpowiedz

18

Nie będziesz pierwszy, a na pewno nie ostatni.

Aby naprawdę odpowiedzieć na pytanie, zakładając, że podążasz za protokołem/standardem i nie łamiesz go (w tym cytatów w ciągu bez ucieczki, na przykład) powinieneś być w porządku. json_encode świetnie sobie z tym radzi, ale jak wspomniałeś @Kolink upewnij się, że zakodowałeś go na UTF8, w przeciwnym razie bezpańskie znaki Unicode czasami będą je łamać, powodując puste wyjście.

Poza tym jest to programista, który chce z niego korzystać. Niektórzy tego unikają i utrzymują interfejs użytkownika na stronie, inni mają serwer generujący interfejs i pozwalający JavaScriptowi go po prostu zrzucić - tak czy inaczej jest to twoja rozmowa i całkowicie akceptowalna.

+0

dzięki, brad! z pewnością pomocna i dokładna odpowiedź :) –

+0

Jako kontynuacja, biblioteki takie jak [Knockout JS] (http: // knockoutjs.com /) umożliwia bardzo łatwą konwergencję danych JSON i integracji interfejsu użytkownika za pomocą łatwego w obsłudze systemu szablonów. –

11

Nie ma w tym nic złego. json_encode wymyka się wszystkim postaciom, więc jedyną rzeczą, na którą musisz uważać, jest upewnienie się, że twoje struny są utf8_encode d.

0

Można było, na pewno, ale można po prostu jak łatwo przekazać wartości jako tablicę w JSON i umieścić kod renderowania HTML w kliencie; oszczędzając cykle serwera, bajty pasma i mieszanie logiczne prezentacji.