2012-02-18 52 views
0

我有JSON的问题,传递HTML代码,我不明白,因为我逃过了addslashes PHP函数。JSON错误通过HTML

这是一个失败的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>" 
} 

当是什么问题?

谢谢问候

+1

有你重新实现json_encode一个特别的原因,不好? – mario 2012-02-18 12:51:21

+0

它在我看来像是嵌入了呼叫来编码数据,而不是呼叫的结果。 – 2012-02-18 12:54:50

+0

@mario YE,但我的剪辑更大,我编辑。 – 2012-02-18 12:54:58

回答

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); 
} 
+0

Thanks!runs well! – 2012-02-18 13:13:11

2

不要那样做!正确地构建JSON在PHP替代:

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

是的,但是我的JSON更大。我使用全部JSON来发送邮件 – 2012-02-18 12:53:31

0

那些单引号不应该被转义:

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