0

我正在尝试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。 ب 实际上被转换到6%u0628Ajax 进程中的某个位置。这不会发生在正常情况下POST(示例一)。

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

4

1 回答 1

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);

这是一个完整的工作 php 脚本,带有 post & 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
}
?>

IE

if (!window.XMLHttpRequest) {
  window.XMLHttpRequest = function() {
    return new ActiveXObject(”Microsoft.XMLHTTP”);
  };
}
于 2013-06-06T13:49:03.040 回答