2010-07-27 22 views
9

Envío json_encoded datos desde mi servidor PHP a la aplicación iPhone. Las cadenas que contienen entidades html, como '&' se escapan por json_encode y se envían como &.obteniendo json_encode para no escapar entidades html

Estoy buscando para hacer una de dos cosas:

  • hacen json_encode no escapa entidades html. Doc dice que el modo "normal" no debería escapar, pero no funciona para mí. ¿Algunas ideas?

  • hacen que la aplicación iPhone escape entidades html de forma económica. La única forma en que puedo pensar hacerlo ahora implica girar un XML/HTML parser que es muy caro. ¿Alguna sugerencia más barata?

Gracias!

Respuesta

7

Ni PHP 5.3 ni PHP 5.2 tocan las entidades HTML.

Puede test esto con el siguiente código:

<?php 
header("Content-type: text/plain"); //makes sure entities are not interpreted 
$s = 'A string with &amp; &#x6F8 entities'; 
echo json_encode($s); 

Vas a ver lo único que hace es PHP para agregar comillas alrededor de la cadena.

+1

Mi propia fuente se escapó - brainfart! – psychotik

2

Según el manual, parece que json_encode no debería estar escapando de sus entidades, a menos que explícitamente se lo indique, en PHP 5.3. ¿Estás ejecutando una versión anterior de PHP?

+0

Sí, estoy usando 5.2.6 Así pre-5.3 json_encode no escaparon entidades html ¿por defecto? – psychotik

3

json_encode no hace eso. Usted tiene otro componente que está haciendo la codificación HTML.

Si utiliza las opciones JSON_HEX_ puede evitar que cualquier < o & caracteres aparecen en la salida (que habían se convierten a \u003C o escapes literales de cadena JS similares), evitando así posiblemente el problema:

json_encode($s, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT) 

aunque esto dependería de saber exactamente qué caracteres están siendo codificados en HTML más adelante. ¿Quizás personajes que no sean ASCII también?

0

Saliendo de la respuesta de Artefacto, recomendaría usar este encabezado, está específicamente diseñado para datos JSON en lugar de simplemente usar texto sin formato.

<?php 
header('Content-Type: application/json'); //Also makes sure entities are not interpreted 
$s = 'A string with &amp; &#x6F8 entities'; 
echo json_encode($s); 

Asegúrese de que echa un vistazo a este post por razones más específicas por las que utilizar este tipo de contenido, What is the correct JSON content type?

Cuestiones relacionadas