2012-02-29 14 views
14

Según el título, ¿se considera una buena práctica poner HTML en JSON? La razón por la que necesito hacer esto es porque me gustaría tener una lista desplegable personalizada, en la lista está viniendo de la entrada del usuario, y el JSON se ve así:Poner HTML en JSON

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

y tengo el foreach de la siguiente manera (mantener en cuenta que es un despojado versión de mi código, validación está en su lugar, pero por el bien de esta pregunta que los sacó)

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

mi preocupación es que podría haber algunos caracteres especiales que podrían romper el Cadena JSON. Por favor ayuda.

+0

Es solo una cadena. Las cadenas son compatibles con JSON. Incluso aquellos con HTML;) - vea http://json.org/ – hakre

+0

@andreas: la separación de la presentación de los datos parece ser el punto principal de los formatos como JSON. ¿Tiene la intención de permitir que otros sitios web o usuarios obtengan estos datos en un lado y lo utilicen _outide_ de su sitio web? Si es así, agregar html arruinará eso. De lo contrario, si se trata de un feed json que solo se utiliza para ayudar a compilar sus páginas web, entonces le corresponde a usted. –

+0

@bob ¿Eh? Pensé que la política de dominio cruzado está en su lugar para cosas como usted mencionó? Entonces, a menos que esté dispuesto a escribir soporte de devolución de llamada en el script, ¿debería estar bien? Por favor, infórmame –

Respuesta

18

No sería el primero en hacerlo, y ciertamente no el último.

Para responder realmente a la pregunta, suponiendo que estás siguiendo el protocolo/estándar y no lo rompes (incluidas las comillas en la cadena sin escabullirlas, por ejemplo) deberías estar bien. json_encode hace un gran trabajo en todo esto, pero como se menciona en @Kolink, asegúrese de codificarlo en UTF8 primero; de lo contrario, los caracteres Unicode ocasionalmente se romperán y se traducirá en una salida vacía.

Más allá de eso, es la preferencia del programador utilizarlo. Algunos lo evitan y mantienen la IU funcionando en la página, otros hacen que el servidor genere la IU y dejan que JavaScript simplemente la vacíe, de cualquier forma es tu decisión, y es perfectamente aceptable.

+0

gracias brad! ciertamente útil y completa respuesta :) –

+0

Como seguimiento, bibliotecas como [Knockout JS] (http: // knockoutjs.com /) permiten una convergencia muy fácil de los datos JSON y la integración de UI mediante un sistema de plantillas fácil de usar. –

11

No tiene nada de malo. json_encode se escapa de todos los caracteres de todos modos, por lo que lo único que debe tener cuidado es asegurarse de que sus cadenas sean utf8_encode d.

0

Podrías, por supuesto, pero igual podrías pasar los valores como una matriz en el JSON y poner el código de representación HTML en el cliente; ahorrándole ciclos de servidor, bytes de ancho de banda y mezcla de presentaciones lógicas.