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>