传递html的JSON错误

时间:2012-02-18 12:49:10

标签: php ajax json escaping

我有JSON的问题,传递html代码,我不明白,因为我使用addslashes php函数进行了转义。

这是失败的JSON:

使用php JSON有效:

<?php if(count($articles)): ?>
{"items":[
<?php foreach($articles as $key => $article): ?>
      <?php if($key==0  ):?>
      {
        "foto_g": "<?php echo $article->getRutafoto() ?>",
        "foto_th": "<?php echo $article->getRutathumb() ?>"

      }
    <?php else: ?>  
    ,
      {
        "foto_g": "<?php echo $article->getRutafoto() ?>",
        "foto_th": "<?php echo $article->getRutathumb() ?>"

      }
    <?php endif ?>  
<?php endforeach ?>
],
"nom_coleccio": "<?php echo $coleccio->getNom()?>"
,
"descripcio_coleccio": "<?php echo addslashes($coleccio->getDescripcio(ESC_RAW))?>"
}
<?php endif ?>  

有问题的结果是:

{
"descripcio_coleccio": "<p>El delta de l\'Ebre ha estat l\'escenari d\'inspiraci&oacute; d\'aquesta col&middot;lecci&oacute;.</p>
<p>La l&iacute;nia de l\'horitz&oacute; i el color del paisatge materialitzats en alumini s\'uneixen per a crear volum en forma de joia.</p>"
}

什么时候出现问题?

谢谢你的问候

3 个答案:

答案 0 :(得分:3)

如果可能,您应该使用正确的编码功能。如果是JSON,您应该使用json_encode,即使只是针对特定值。

但是如果使用关联键在数组中收集值并且仅在结尾使用json_encode会更容易:

if (count($articles)) {
    $items = array();
    foreach ($articles as $key => $article) {
        $items[] = array(
            "foto_g"  => $article->getRutafoto(),
            "foto_th" => $article->getRutathumb()
        }
    }
    $data = array(
        "items"               => $items,
        "nom_coleccio"        => $coleccio->getNom(),
        "descripcio_coleccio" => $coleccio->getDescripcio(ESC_RAW)
    );
    echo json_encode($data);
}

答案 1 :(得分:2)

不要那样做!用PHP正确构造JSON:

<?php
        echo json_encode(array
        (
            "descripcio_coleccio" => $coleccio->getDescripcio(ESC_RAW)
        ));
?>

答案 2 :(得分:0)

不应转义这些单引号:

{
    "descripcio_coleccio": "<p>Eldeltadel'Ebrehaestatl'escenarid'inspiraci&oacute;d'aquestacol&middot;lecci&oacute;.</p><p>Lal&iacute;niadel'horitz&oacute;ielcolordelpaisatgematerialitzatsenaluminis'uneixenperacrearvolumenformadejoia.</p>"
}