2011-08-26 105 views
0

我有一个PHP脚本,返回json_encoded反应就是喜欢这样:AJAX JSON转换符号到HTML特殊字符

//PHP 
$response = array('type' => 'success', 'content' => '&&!%$#!some words'); 
echo json_encode($response); 
return; 

现在的JS是在得到响应,并试图将这些内容在一个textarea:

$('#some_form').ajaxForm({ 

    success: function(resp){ 

     if(resp.type === 'success') 
     { 

      $('#text_area').val(resp.content); 

     } 

    }, 
    dataType: 'json' 
}); 

脚本的内容将在文本区域显示为这样:

&&!%$#!some words 

为什么“&”符号被搞乱了,但没有其他标点符号?有没有解决的办法?我希望&符号在文本区域中显示为常规符号。

+0

有没有内置函数来做到这一点,这里是另一个线程在同一个问题:http://stackoverflow.com/questions/3700326/decode-amp-back-to-in-javascript –

+0

检查内容json_encode之前的'$ response'变量,我敢打赌这个'&已经在那儿了(或者它是与你的数据混淆的ajaxForm插件) – arnaud576875

+0

@ arnaud576875没有理由让PHP使用HTML编码在一个变量中 - 它不知道你要处理这些数据。 json_encode函数可能导致这种情况,但我怀疑这是在浏览器中的某处发生的。 – tomfumb

回答

0

刚刚查看了jquery表单插件的代码。在这里有一个特殊情况,文件上传的处理方式不同(以及我正在使用的部分)。有关如何工作的详细信息可以在这里找到:http://jquery.malsup.com/form/#file-upload

但是,会发生什么事是它使用调用innerHTML来检索内容。这实际上将东西转换成html字符串。

我用某种方式增强了它,以便它首先进行URL编码,然后进行URL解码以保持文本的完整性。

0

这下面的代码会产生以下JSON { “类型”: “成功”, “内容”: “& &%$#有些话!”}

$response = array('type' => 'success', 'content' => '&&!%$#!some words'); 
     echo json_encode($response); 
     return; 

我无法看到特殊字符转换为html实体的位置。 我怀疑还有更多的事情要发生在眼前。

0

你可以通过使用html()而不是val()来解决你的问题。

当您尝试使用VAL()函数,这在任何情况下转动&到&,因为&是HTML保留,并插入一个&时出现的问题,如果你想用它来显示你必须使用一个符号&。

但由于&是HTML和功能VAL()只插入文本事实证明“&”成html了,所以你得到的文本“&”显示在浏览器了。