json_encode no escapa correctamente, sólo convierte un array a JSON.
Probá este ejemplo y vas a encontrarte con un error:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin título</title>
<?php
$algo=array('<div id="juan">
hola
</div>
','bla');
$a=json_encode($algo);
?>
<script>
var json="<?php echo $a ?>";
json=eval("("+json+")");
onload=function(){
document.body.innerHTML=json[0];
}
</script>
</head>
<body>
</body>
</html>
Probá este otro y vas a ver que no hay error:
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin título</title>
<?php
function js_encode($s){
$texto='';
$lon=strlen($s);
for($i=0;$i<$lon;++$i){
$num=ord($s[$i]);
if($num<16) $texto.='\x0'.dechex($num);
else $texto.='\x'.dechex($num);
}
return $texto;
}
$algo=array('<div id="juan">
hola
</div>
','bla');
$a=json_encode($algo);
?>
<script>
var json="<?php echo js_encode($a) ?>";
json=eval("("+json+")");
onload=function(){
document.body.innerHTML=json[0];
}
</script>
</head>
<body>
</body>
</html>