2012-01-12 29 views
27

En PHP, uso json_encode() para repetir matrices en atributos de datos HTML5. Como JSON requiere - y json_encode() genera - valores encapsulados mediante comillas dobles. Me envuelvo mi para ello los datos de atributos con comillas simples, como:Escapar/codificar comillas simples en atributos de datos HTML5 codificados en JSON

<article data-tags='["html5","jquery","php","test's"]'> 

Como se puede ver, la última etiqueta (prueba de) contiene una comilla simple, y el uso de json_encode() sin opciones conduce a problemas de análisis.

Así que uso json_encode() con el parámetro JSON_HEX_APOS, y el análisis está bien, ya que mis comillas simples están codificadas, pero me pregunto: ¿hay un inconveniente al hacerlo así?

+0

Usted significa desventaja en el sentido de que funciona? – hakre

+1

Me refiero a la desventaja en el sentido de "efectos secundarios inesperados que la codificación hexadecimal podría producir" –

+0

No ha mostrado ningún código de cómo se genera algo, por lo que una respuesta solo podría ser una buena suposición. – hakre

Respuesta

47

Es necesario que los datos de escape HTML generado en HTML:

printf('<article data-tags="%s">', 
    htmlspecialchars(json_encode(array('html5', ...)), ENT_QUOTES, 'UTF-8')); 
+0

+1 siempre use la codificación adecuada en la salida, el único camino a seguir. Los puntos de código no válidos (como '\ x00' necesitarían codificación hexadecimal según las especificaciones de X (HT) ML). – hakre

+0

Esta parece ser la opción más segura, gracias. –

+0

para simplicidad htmlspecialchars (json_encode ($ arrayData), ENT_QUOTES, 'UTF-8') – zainengineer

Cuestiones relacionadas