我正在尝试将数据作为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流程中忘记/做错了什么?
答案 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”);
};
}