2012-02-18 31 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>" 
}