各位高手帮我解决AJAX传输数据的中文乱码问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了各位高手帮我解决AJAX传输数据的中文乱码问题相关的知识,希望对你有一定的参考价值。

在网站中注册用户时有无刷新检测用户名是否重名的功能
以下是前台的检测程序:
<script>
var xmlHttp = false;
try
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
catch (e)
try
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
catch (e2)
xmlHttp = false;


if (!xmlHttp && typeof XMLHttpRequest != 'undefined')
xmlHttp = new XMLHttpRequest();


function callServer()
var u_name = document.getElementById("user").value;
if ((u_name == null) || (u_name == "")) return;
var url = "check.asp?name=" + escape(u_name);
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = updatePage;
xmlHttp.send(null);


function updatePage()
if (xmlHttp.readyState < 4)
username.innerhtml="正在检测用户名是否可用......";

if (xmlHttp.readyState == 4)
var response = xmlHttp.responseText;
username.innerHTML=response;


此前台页面的编码格式是harset=gb2312
但是由于XMLHTTP提交到后台后默认是UTF8编码的
所以我的后台程序只能用UTF8编码,否则无法显示中文
我的后台程序是:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="../Connections/web.asp" -->
<%
Dim Recordset1__MMColParam
Recordset1__MMColParam = "1"
If (Request.QueryString("name") <> "") Then
Recordset1__MMColParam = Request.QueryString("name")
End If
%>
<%
Dim Recordset1
Dim Recordset1_numRows

Set Recordset1 = Server.CreateObject("ADODB.Recordset")
Recordset1.ActiveConnection = MM_web_STRING
Recordset1.Source = "SELECT * FROM Admin WHERE A_username = '" + Replace(Recordset1__MMColParam, "'", "''") + "'"
Recordset1.CursorType = 0
Recordset1.CursorLocation = 2
Recordset1.LockType = 1
Recordset1.Open()

Recordset1_numRows = 0
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body>
<% If Recordset1.EOF And Recordset1.BOF Then %>
该用户可以注册
<% Else %>
该用户已经被注册
<% End If %>
</body>
</html>
<%
Recordset1.Close()
Set Recordset1 = Nothing
%>
这样,当填写的用户名尚没有被注册时时,可以正常显示中文"该用户可以注册";当填写的用户名已经被注册时时,可以正常显示中文"该用户已经被注册"!
但是新的问题来了
由于前台和后台用的是不同的编码格式,如果填写的用户名是中文的,那么即使该用户名已经被注册时,也显示:“该用户可以注册”
请高手们帮帮改改这些代码,使后台也可以使用gb2312 编码格式,从而使注册时输入中文的用户名时也能检测出"该用户已经被注册"!
本人将不胜感激,各位就是我的再生父母

你都说了的嘛 两边的编码格式不同,那你就改成相同的嘛
或者在后台页面中
Recordset1__MMColParam = Request.QueryString("name") 得到name之后就对其进行编码格式转换,我一直都用的jsp的,对asp不是很熟
在jsp中是这样来做的:
String name = request.getParameter("name");
name = new String(name.getBytes("8859_1"),"gb2312");

或者在后台文件的的接收数据之前,就先设置request的编码格式,jsp中是这样的
request.setCharacterEncoding("gb2312");
就ok了

你这是使用的get方式进行请求的,如果你用的是post方式的话,
就必须进行两次编码,一次解码...................
参考技术A 保证数据库里的数据正确..可能在你的数据库里存放的根本不是正确的中文....

有效解决ajax传中文时,乱码的情况,php处理接收到的值

在抽奖环节时,需把获奖名单通过ajax的post方式传输给php后台进行储存,但是php接收到的值确是乱码。在百度之后并没有找到合适的解决方法。

 

技术分享图片技术分享图片

 

技术分享图片

 

则使用js的encodeURI函数可以有效解决,但不知为何需使用两次。

技术分享图片

此时传输的值获取到的为:

技术分享图片

则PHP使用urldecode函数处理获取到的值。

技术分享图片

则有效解决ajax传输中文乱码的情况。

声明:本人菜鸟一枚,有不对之处还望指出。

以上是关于各位高手帮我解决AJAX传输数据的中文乱码问题的主要内容,如果未能解决你的问题,请参考以下文章

ajax如何传中文参数乱码解决办法

ajax中文乱码的各种解决办法总结

json传输数据解决中文乱码问题

ajax中中文乱码的问题

ajax得到后台传过来的参数后乱码

Python 3 与 Javascript escape 传输确保数据正确方法和中文乱码解决方案