2013-04-09 48 views
0

與AJAX specialChars中以$ _GET我有CKEditor的文本形式:的Javascript VAR在PHP

<textarea id="descrizione_it"></textarea> 
<textarea id="descrizione_fr"></textarea> 
... many others inputs ...  
<button onclick="addDataProd()"> 

的JS功能:

function addDataProd(){ 
    var descrizione_it = CKEDITOR.instances.descrizione_it.getData() 
    var descrizione_fr = CKEDITOR.instances.descrizione_fr.getData() 

    if (window.XMLHttpRequest) { 
     xmlhttp=new XMLHttpRequest();  
    } else { 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange=function() { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
     alert(xmlhttp.responseText); 
     } 
    } 

xmlhttp.open("GET","prodotti_ajax.php?descrizione_it_new="+descrizione_it + "&descrizione_fr_new="+descrizione_fr,true); 
xmlhttp.send(); 
} 

並與獲取數據的PHP和更新數據庫。

現在,如果我在CKEditor textarea上編寫了一些特殊的字符,那些字符總是和立即轉換tu htmlentities(&egrave;)。

如果我寫的JS

alert(descrizione_fr) 

我得到的字符串作爲寫在CKEditor的如

&egrave;&egrave;&egrave;&agrave;

但是當我在php中回顯字符串時,字符串在特殊字符之前停止。

E.g. JS:

alert(descrizione_fr) 

結果:

test_test_ 

我該如何解決:

test_test_&egrave;test 

PHP:在

echo $_GET['descrizione_fr_new']; 

結果?

謝謝!

+0

encodeURIComponent方法(VAR)是正確的方式? – user2120569 2013-04-09 21:10:12

+0

當談到textareas(CKEditor)時,最好是POST數據,而不是使用GET。 – Adrian 2013-04-09 21:11:26

回答

0

您可以嘗試使用瀏覽器解析器執行此操作。 DEMO

function html_decode(text){ 
    var div = document.createElement("div"); 
    div.innerHTML = text; 
    return ("textContent" in div) ? div.textContent : div.innerText ; 
} 

我不知道這是否是最好的方式。但我發現this solution in jQuery並使其成爲純JavaScript。 希望它能幫助

編輯:使用的textContent(IE9 +)作爲默認和的innerText作爲後備兼容性

+0

謝謝。使用encodeURIComponent(var_to_encode)我得到了相同的結果......也許最好使用它? – user2120569 2013-04-09 21:16:23

+0

我正在考慮'innerText'屬性..我不知道Firefox是否可以識別它..但是也有'textContent' .. – fernandosavio 2013-04-09 21:19:14

+0

這只是解決你的html編碼/解碼問題.. 在你的'alert (descrizione_fr)'like'alert(html_decode(descrizione_fr))'.. 只有當你知道內容時才使用它,它也會解析腳本標籤。 – fernandosavio 2013-04-09 21:24:23