AJAX:使用UTF-8发布方法

时间:2013-06-06 12:40:56

标签: php javascript ajax utf-8 utf

我正在尝试将数据作为UTF-8发送到Ajax,但它正在更改unicode中的一些数据。我将用两个简短的例子来解释它:

一个简单的POST(没有ajax)

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

始终设置Meta和PHP标头:

<meta charset="utf-8">

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

如果我提交阿拉伯字母(ب)并使用strlen(),则会返回3.如果我使用mb_strlen()它将返回1.这一切都很好,因为它应该是

现在是Ajax版本。表单,标题和元素是相同的。但是onsubmit()在Javascript中调用了这个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.ب实际上在Ajax进程的某处转换为6%u0628。这不会发生在正常POST(例一)。

我在Ajax流程中忘记/做错了什么?

1 个答案:

答案 0 :(得分:1)

我使用了很多ajax并且总是只使用utf8而且从来没有遇到过问题,我主要是使用chrome和safari ios

也许可以尝试通过删除所有标题来更改您的ajax脚本。并使用新的FormData(应该适用于大多数现代浏览器)...确保不是全部。

document.forms[0]表示它会从您网页中的第一个表单中获取所有字段。 否则给它一个id并致电document.getElementById('myform') 我也不再使用readyState ... onload

在postresponsefunction中返回响应你写this.response

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

这是一个complet工作的PHP脚本与post&amp; ajax文件名为'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”);
  };
}