2013-04-09 72 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