Php 传递html时发生JSON错误

Php 传递html时发生JSON错误,php,ajax,json,escaping,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": "<?ph

我有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 ?>  

{“项目”:[
{
“foto_g”:“,
“foto_th”:”
}
,
{
“foto_g”:“,
“foto_th”:”
}
],
“姓名”:”
,
“描述”:”
}
出现问题的结果是:

{
"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>"
}
{
“描述”:“El delta de l'Ebre ha estat l'escenari d'inspiració;d'aquesta col·;lecció

“每一卷铝合金材料的颜色和形状都不相同。

” }
什么时候出问题了


谢谢大家不要那样做!在PHP中正确构造JSON:

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

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

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

这些单引号不应转义:

{
    "descripcio_coleccio": "<p>Eldeltadel'Ebrehaestatl'escenarid'inspiraci&oacute;d'aquestacol&middot;lecci&oacute;.</p><p>Lal&iacute;niadel'horitz&oacute;ielcolordelpaisatgematerialitzatsenaluminis'uneixenperacrearvolumenformadejoia.</p>"
}
{
“描述:”Eldertadel'Ebrehasestatel'escenarid'inspiració;d'aquestacol·;lecció;

Lalí;niadel'horitzó;IelColordelPagementGematerialitzatsenaluminis'Uneixeneperararacurevolumermadejoia.

” }
这些单引号不应转义:

{
    "descripcio_coleccio": "<p>Eldeltadel'Ebrehaestatl'escenarid'inspiraci&oacute;d'aquestacol&middot;lecci&oacute;.</p><p>Lal&iacute;niadel'horitz&oacute;ielcolordelpaisatgematerialitzatsenaluminis'uneixenperacrearvolumenformadejoia.</p>"
}
{
“描述:”Eldertadel'Ebrehasestatel'escenarid'inspiració;d'aquestacol·;lecció;

Lalí;niadel'horitzó;IelColordelPagementGematerialitzatsenaluminis'Uneixeneperararacurevolumermadejoia.

” }
如果可能,您应该使用正确的编码功能。在使用JSON的情况下,即使只是针对特定的值,也应该使用JSON

但如果您使用关联键收集数组中的值,并仅在末尾使用
json\u 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);
}

如果可能,您应该使用适当的编码功能。在使用JSON的情况下,即使只是针对特定的值,也应该使用JSON

但如果您使用关联键收集数组中的值,并仅在末尾使用
json\u 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);
}

你重新实现json_encode有什么特别的原因吗?在我看来,你是在嵌入调用来对数据进行编码,而不是调用的结果。@mario是的,但我的结构更大,我编辑过。也许你应该展示一下你真正在做什么。这并不能解释为什么你不先用奇怪的循环创建数组结构,或者至少对字符串值使用json_encode,而不是手动将其封装在
double quotes。您重新实现json_encode有什么特别的原因吗?很糟糕?在我看来,您是在嵌入调用来对数据进行编码,而不是调用的结果。@mario是的,但我的结构更大,我编辑过。也许你应该展示一下你真正在做什么。这并不能解释为什么你不先用奇怪的循环创建一个数组结构,或者至少对字符串值使用json_编码,而不是手动将其包含在
双引号。是的,但我的JSON更大。我用所有的JSON写了一篇文章。是的,但是我的JSON更大。我用所有的JSON标记了这篇文章。