Javascript 如何使用Ajax表单将语言设置为中文提交到不同的PHP文件?
我正在做一个中文项目(gb2312)。我们有一个表单,使用Ajax将客户输入数据从文件1提交到php文件2。这两个文件显示中文没有问题。但当相同的数据从文件1提交到文件2时,它变成了完全错误的字符。例如: 文件1Javascript 如何使用Ajax表单将语言设置为中文提交到不同的PHP文件?,javascript,jquery,ajax,forms,special-characters,Javascript,Jquery,Ajax,Forms,Special Characters,我正在做一个中文项目(gb2312)。我们有一个表单,使用Ajax将客户输入数据从文件1提交到php文件2。这两个文件显示中文没有问题。但当相同的数据从文件1提交到文件2时,它变成了完全错误的字符。例如: 文件1 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <script src="http://ajax.googleapis.com
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
</head>
<body>
<div id="msg">0</div>
<form id="add-form" action="file2.php" method="POST">
<input type=text name='content' value='试试这个' >
<input type="button" id="add-post" value="Run Code" />
</form>
<script>
$(document).ready(function()
{
$("#add-post").click(function()
{
$("#add-form").submit(function(e)
{
$("#msg").html("<img src='/image/progress_bar.gif'/>");
var postData = $(this).serializeArray();
var formURL = $(this).attr("action");
$.ajax(
{
url: formURL,
type: "POST",
data : postData,
contentType: "application/x-www-form-urlencoded;charset=gb2312",
success:function(data, textStatus, jqXHR)
{
$("#msg").html('<pre>'+data+'</pre>');
},
});
e.preventDefault(); //STOP default action
e.unbind();
});
$("#add-form").submit(); //SUBMIT FORM
});
});
</script>
</body>
</html>
0
$(文档).ready(函数()
{
$(“#添加帖子”)。单击(函数()
{
$(“#添加表格”)。提交(功能(e)
{
$(“#msg”).html(“”);
var postData=$(this.serializeArray();
var formURL=$(this.attr(“操作”);
$.ajax(
{
url:formURL,
类型:“POST”,
数据:postData,
contentType:“application/x-www-form-urlencoded;charset=gb2312”,
成功:函数(数据、文本状态、jqXHR)
{
$(“#msg”).html(“”+数据+“”);
},
});
e、 preventDefault();//停止默认操作
e、 解除绑定();
});
$(“#添加表单”).submit();//提交表单
});
});
文件2
$chinese_content = iconv('UTF-8', 'GB2312', $_POST['content']);
两个文件都显示中文字符,没有问题。但当将中文内容从文件1提交到文件2时,内容会变得乱七八糟,而且似乎不是正确的字符。我认为问题应该在Ajax提交脚本中的某个地方,但不知道如何解决它
你能帮帮我吗?提前感谢。是的,问题肯定是在Ajax请求时出现的。如果查看
contentType
属性的,您将看到以下注释:
W3CXMLHttpRequest规范规定字符集始终为UTF-8;指定另一个字符集不会强制浏览器更改编码
在为浏览器呈现页面时,可以返回gb2312字符,但Ajax请求似乎总是以UTF-8格式发送。因此,您需要让PHP脚本接受UTF-8,以便正确解析数据。我建议从Ajax请求中删除contentType
头
PHP收到UTF8编码字符串后,可以使用以下函数将其转换回gb2312:
是的,我按照您的建议从Ajax请求中删除contentType头,并在文件2中使用PHP脚本来接受UTF-8。文件2中的内容显示了正确的字符。但这与文件2上的mysql数据库设置相冲突。这个解决方案给我们带来了另一个问题。我想知道是否有其他方法将gb2312内容提交到其他文件?谢谢。我用一个例子更新了我的答案,说明了如何将UTF8字符串转换为GB2312,然后用于数据库交互。
$chinese_content = iconv('UTF-8', 'GB2312', $_POST['content']);