getting json_encode to not escape html entities getting json_encode to not escape html entities json json

getting json_encode to not escape html entities


Neither PHP 5.3 nor PHP 5.2 touch the HTML entities.

You can test this with the following code:

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

You'll see the only thing PHP does is to add double quotes around the string.


json_encode does not do that. You have another component that is doing the HTML encoding.

If you use the JSON_HEX_ options you can avoid that any < or & characters appear in the output (they'd get converted to \u003C or similar JS string literal escapes), thus possibly avoiding the problem:

json_encode($s, JSON_HEX_TAG|JSON_HEX_AMP|JSON_HEX_QUOT)

though this would depend on knowing exactly which characters are being HTML-encoded further downstream. Maybe non-ASCII characters too?


Based on the manual it appears that json_encode shouldn't be escaping your entities, unless you explicitly tell it to, in PHP 5.3. Are you perhaps running an older version of PHP?