2011-08-26 117 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了,所以你得到的文本「&」顯示在瀏覽器了。