2013-06-06 5 views
0

Ajax를 통해 UTF-8으로 데이터를 보내려고하지만 unicode의 일부 데이터가 변경됩니다. (아약스없이)AJAX : UTF-8을 사용한 게시 방법

간단한 POST

<form accept-charset="UTF-8" method="POST" action="test2.php"> 
<input type="text" class="" name="text"> 
<input type="submit" class="button" value="Submit"> 
</form> 

메타와 PHP 헤더가 항상 설정됩니다 :

<meta charset="utf-8"> 

header("Content-Type: text/html; charset=utf-8"); 

내가 아랍어 편지를 제출하는 경우 (나는이 개 짧은 예제와 함께 설명 할 것 ب)이고 strlen()을 사용하면 3을 반환합니다. mb_strlen()을 사용하면 1을 반환합니다. 그래야 정상입니다.

이제 Ajax 버전. 양식, 헤더 및 메타는 동일합니다.

... (initiating HttpReq) 
self.xmlHttpReq.open('POST', strURL, true); 
self.xmlHttpReq.setRequestHeader("charset", "utf-8"); 
self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
... 
if (self.xmlHttpReq.readyState == 4) { ... } 

이제 동일한 테스트가 strlen() 6 제공하고 또한 mb_strlen() 6의 ب 실제로 어딘가에 아약스 과정에서 6%u0628로 전환했다 .. 그리고 이런 일이되지 않습니다하지만 onsubmit()는 자바 스크립트에서이 아약스 호출 보통 POST (예 1)입니다.

Ajax 프로세스에서 내가 잊어 버리고 잘못하고있는 것은 무엇입니까?

답변

1

난 단지 UTF8 사용하고 문제가 없었 항상 많이 아약스를 사용하고, 나는 크롬 및 사파리 IOS

에 주로 해요

어쩌면 (새로운 FormData을 사용하여 모든 headers.and을 제거하여 UR 아약스 스크립트를 변경해보십시오 대부분의 최신 브라우저에서 작동해야합니다.

document.forms[0]은 페이지의 첫 번째 양식에서 모든 입력란을 가져 오는 것을 의미합니다. 다른 은

onload는 u는 여기

var fd=new FormData(document.forms[0]), 
c=new XMLHttpRequest(); 
c.open('POST',strURL); 
c.onload=postresponsefunction; 
c.send(fd); 

this.response가 COMPLET과 함께 PHP 스크립트를 작동하고 쓰기 postresponsefunction의 응답을 반환하는 ... 나는 또한 더 이상 readyState 사용하지 않는 그에게 ID를 부여하고 document.getElementById('myform') 전화 포스트 & 아약스 파일은 'test.php'

<?php 
if($_REQUEST){ 
print_r($_REQUEST); 
}else{ 
?> 
<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>postajax</title> 
<script> 
var 
rf=function(){ 
document.getElementsByTagName('div')[0].innerText=this.response; 
}, 
sf=function(e){ 
e.preventDefault();e.stopPropagation(); 
var fd=new FormData(document.getElementsByTagName('form')[0]), 
c=new XMLHttpRequest(); 
c.open('POST','test.php'); 
c.onload=rf; 
c.send(fd); 
}; 
window.onload=function(){ 
document.getElementsByTagName('form')[0].onsubmit=sf; 
} 
</script> 
</head> 
<body> 
<form> 
<input type="text" name="mytext"><input type="submit" value="submit"> 
</form><div></div> 
</body> 
</html> 
<?php 
} 
?> 

이름
if (!window.XMLHttpRequest) { 
    window.XMLHttpRequest = function() { 
    return new ActiveXObject(”Microsoft.XMLHTTP”); 
    }; 
} 
+0

스크립트가 제대로 작동하는 것 같습니다. 고마워! FormData가 작동하지 않는 브라우저를 알고 있습니까? 그것을 사용하고 싶지만 대부분의 브라우저 (및 오래된 브라우저)에서도 작동해야합니다. –

+0

예 : 현대적인 브라우저가이 이전 버전을 지원하지 않습니다.이 XHR2 및 FormData는 http://caniuse.com/xhr2이고 여기에 다른 브라우저 용 polyfill forFormData. https://github.com/francois2metz/html5-formdata – cocco

+0

이전 브라우저로 어떻게 처리합니까? –