0

我试图在 PHP 的 json 中编码一些 html。该函数从 PHP 文件请求数据,然后将append其放入 html 页面。该函数可以正常工作,直到我尝试传递的字符串中有 < 或 >。这是我的 PHP 代码:

$append = "<b>Edit</b>";
for($i=0;$i<count($atarray);$i++)
{
    $append .= $atarray[0]['atname'];
}
$json = json_encode(array('ok' => '0', 'apso' => $append));
echo $json;

这很好用,如果不是"<b>edit</b>"我使用"Edit",有没有办法让它工作,包括 HTML 标签?

控制台中出现的错误是Uncaught SyntaxError: Unexpected token < jquery-1.7.js:2每当我运行该功能时。

JavaScript

我正在使用 jQuery 表单插件-> http://archive.plugins.jquery.com/project/form 它正在将变量作为POST数据发送

但这是我的功能

$(function(){
$("#change").submit(function(e){
    e.preventDefault();
    $(this).ajaxSubmit({
        beforeSubmit:function(before){
            $('#loadingsignup').show();
            $("#resultsignup").empty().hide();
        },
        success:function(retour){
            $('#loadingsignup').hide();
            res=jQuery.parseJSON(retour);
            if(res.ok==1){
                $('#resultsignup').append('<p class="good"><?php echo $lang['107']; ?></p>');
                if(res.img!==undefined){
                    $('#eaim').attr('src','/images/artistsprofilepic/'+res.img);
                }
            }else if(res.apso!==undefined){
                var ap=res.apso;
                $('#apso').append(ap);
            }else{
                $('#resultsignup').append('<p class="pasgood">'+res.err+'</p>');
            }
            $("#resultsignup").hide().fadeIn(500);
            setTimeout("$('#resultsignup').fadeOut();",5000);
        }
    });
});
});
4

4 回答 4

3

尝试摆脱对 的调用jQuery.parseJSON,并使用该选项dataType: 'json'.ajaxSubmituses jQuery.ajax,它试图找出响应的格式,它可能已经确定它是 JSON,所以它已经被解析了。再次解析它会导致此错误。

于 2012-09-23T01:43:01.667 回答
2

这只是一个猜测,但请尝试在您的 JSON 回显之前添加它(它应该在那里)。

header('Content-type: application/json');

这将设置https://stackoverflow.com/questions/267546/correct-http-header-for-json-file,否则它将默认内容类型为text/html,我认为这会混淆 jQuery。

另外,根据评论,请显示您正在使用的javascript。

于 2012-09-23T00:34:35.013 回答
1

设置响应数据类型:

$(this).ajaxSubmit({
  dataType: "json",
  ....
});
于 2012-09-23T01:05:21.243 回答
0

您可以使用它们对它们进行编码htmlentities()

$json = htmlentities(json_encode(array('ok' => '0', 'apso' => $append)), ENT_NOQUOTES, 'UTF-8');

http://php.net/manual/en/function.htmlentities.php

您还可以选择只对$append变量中的值进行编码,如下所示:

$json = json_encode(array('ok' => '0', 'apso' => htmlentities($append, ENT_NOQUOTES, 'UTF-8')));
于 2012-09-23T00:25:50.810 回答