AJAX 가 GB 2312 의 중국어 인 코딩 으로 AJAX 특수 문자 인 코딩 을 전송 하 는 정확 한 방법
var xmlHttp;
function createXML(){
if(window.ActiveXObject){
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){
xmlHttp=new XMLHttpRequest();
}
}
function startXml(){
createXML();
xmlHttp.onreadystatechange = handleStateChange;
var url="ajaxtext.asp?tm=1&cc"+Math.random();
//var sendContents = 'theinput='+escape(theinput.value);
var regcode="2abc";
xmlHttp.open("get",url,true);
//regcode="regcode="+regcode;
//xmlHttp.setrequestheader("content-length",regcode.length); //
//xmlHttp.setRequestHeader("Cache-Control","no-cache");
//xmlHttp.setRequestHeader('Content-type','application/x-www-form-urlencoded'); //
//xmlHttp.send(null);
//xmlHttp.send("regcode="+escape(regcode));
xmlHttp.send(null);
}
function handleStateChange(){
if (xmlHttp.readyState == 4 && xmlHttp.status==200){
//var divid=document.getElementById("results");
retext=xmlHttp.responseText;
alert(retext);
//if(divid.hasChildNodes()){
// divid.removeChild(divid.childNodes[0]);
//}
//var result=document.createTextNode(xmlHttp.responseText);
//divid.appendChild(result);
//document.getElementById("results").innerHTML=xmlHttp.responseText;
}
}
서버 쪽:
<%Response.CodePage=936%>
<%Response.charset="GB2312"
dim reg
reg=Request("regcode")
Response.write " ・ " ' 。
%>
방법 2:클 라 이언 트 에서 함수 로 변환(인터넷 에서).
function gb2utf8(data){
var glbEncode = [];
gb2utf8_data = data;
execScript("gb2utf8_data = MidB(gb2utf8_data, 1)", "VBScript");
var t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2");
t=t.split("@");
var i=0,j=t.length,k;
while(++i<j) {
k=t[i].substring(0,4);
if(!glbEncode[k]) {
gb2utf8_char = eval("0x"+k);
execScript("gb2utf8_char = Chr(gb2utf8_char)", "VBScript");
glbEncode[k]=escape(gb2utf8_char).substring(1,6);
}
t[i]=glbEncode[k]+t[i].substring(4);
}
gb2utf8_data = gb2utf8_char = null;
return unescape(t.join("%"));
}
이때 서버 측 에서 인 코딩 을 가리 키 지 않 으 면 AJAX 기본 값 은 UTF-8 이 고 클 라 이언 트 에 표시 할 수 없 으 며 이 함 수 를 사용 하면 됩 니 다.
retext=xmlHttp.responseText;
retext=gb2utf8(retext);
alert(retext);
3.불 여우 브 라 우 저 에서:구체 적 으로 참고 하 십시오.다음 글 은 불 여우 가 비교적 간단 합 니 다.그 는 xmlHttp.responseText 를 지원 할 수 있 습 니 다./FireFox,그러나 코드 를 간소화 하기 위해 서 는 위의 것 으로 직접 인 코딩 을 하 는 것 을 권장 합 니 다.하지만 통용 되 기 위해 서 는 POST 아래 에 소 개 된 방법 으로 하 자.2.POST 에서 보 낼 때:일반적인 중국어 에 대해 상기 GET 방법 은 POST 에서 도 가능 하지만 인터넷 에서 일부 기 호 는 표시 할 수 없 는 것 을 언급 했다.예 를 들 어 다음 글 에서'test·test+test',(중간 은 간격 번호)테스트 를 했 는데 서버 에서 인 코딩 을 정 한 후에 클 라 이언 트 에 출력 해도 표시 할 수 없다.글 에서 말 한 대로 발송 단 은 xmlHttp.send("regcode="+escape(regcode)를 사용 합 니 다.그 다음 에 서버 에서 받 은 데 이 터 를 두 개의 인 코딩 encodeURIComponent(escape(xxxxxx)에 끼 워 넣 으 면 테스트%25u7A5Eest%2520 test 가 나타 나 고 똑 같이 안 됩 니 다.또한 이 사고방식 은 옳지 않 아야 한다.이 글 이 인터넷 에서 옮 겨 쓸 때 그 자체 가 틀 렸 는 지 모르겠다.이치대로라면 클 라 이언 트 가 escape 인 코딩 으로 전송 한 후에 서버 에서 인 코딩 을 반대로 해 야 한다.혹은 REQUEST 자체 가 디 코딩 작용 을 한다.두 번,세 번 인 코딩 할 필요 가 없습니다.게다가 이 스 케 이 프 와 encodeURIComponent 도 특수 문자 인 코딩 을 할 수 없습니다.서버 에서 다음 과 같은 출력 을 했 습 니 다.
test2="test・test+test・ :"
Response.write test2&" “・” 。 ( AJAX , ):"
즉,서버 에서 같은 특수 문 자 를 직접 생 성 했 습 니 다.이 서버 엔 드 파일 은<%Response.charset="GB 2312"%>로 인 코딩 을 GB 2312 로 정의 하 였 습 니 다.그러나 출력 결 과 는 서버 에서 생 성 된 test 2="test·test+test·리 턴:"정상적으로 출력 할 수 있 고 받 은 AJAX 값 은 안 됩 니 다.클 라 이언 트 에서 JS 세 개의 인 코딩 매개 변수 인 escape()\encodeURI()\encodeURIComponent()를 모두 시험 해 보고 서버 에서 인 코딩 을 되 돌려 출력 해도 안 됩 니 다.이것 은 문자열 의 특수 기호 가 서버 에서 받 을 때 이미 변형 되 었 다 는 것 을 설명 한다.현재 문 제 는 인 코딩 전달 에 정의 되 었 습 니 다.이 문 제 를 설명 하기 위해 저 는 또 하나의 작은 테스트 를 했 습 니 다.바로 이 문자열 을 ASP 에 할당 하 는 변 수 를 ASP 변수 로 JS 에 할당 하 는 것 입 니 다.다음 과 같 습 니 다.
<%
para="test・test+test・/"
para=Server.urlencode(para)
%>
결 과 는 정상 입 니 다.이것 은 ASP 의 server.urlencode 가 특수 문자 인 코딩 을 완전 하 게 할 수 있다 는 것 을 충분히 설명 합 니 다.JS 는 아직 부족 합 니 다.그럼 이제 어 떡 해?정말 어 쩔 수 없 는 상황 에서 저 는 encodeURIComponent()가 encode()보다 더 많은 특수 문자 인 코딩 을 할 수 있다 는 것 을 생각 했 습 니 다.그러면 다 중 MD5 암호 화 처럼 강화 제 를 추가 하 는 것 도 좋 습 니 다.그래서 저 는 두 개의 encodeURIComponent()를 사 용 했 습 니 다.현재 코드 는:
xmlHttp.open("POST",url,true);
var regcode="<%=para%>";
xmlHttp.setRequestHeader('Content-type','application/x-www-form-urlencoded;charset=gb2312');
xmlHttp.send("regcode="+regcode);
위 에 클 라 이언 트 의 것 입 니 다.서버 쪽 을 다음 과 같이 바 꾸 었 습 니 다.
var regcode="test・test+test・/";
xmlHttp.setRequestHeader('Content-type','application/x-www-form-urlencoded;charset=gb2312');
xmlHttp.send("regcode="+encodeURIComponent(encodeURIComponent(regcode)));
드디어 AJAX 출력 의 특수 문 자 를 완벽 하 게 보 았 습 니 다.간격 번호 와+번호 가 모두 나 왔 습 니 다."test·test+test·/"더 검증 하기 위해 아래 encodeURIComponent 도 인 코딩 할 수 없 는 개별 특수 문 자 를 모두 추 가 했 습 니 다.다음 과 같 습 니 다.
<script language="javascript" runat="server">
function decodestr(str){
return decodeURIComponent(decodeURIComponent(str));
}
</script>
<%
dim reg
reg=Request("regcode")
test2="test・test+test・ :"
Response.write test2&" “・” 。 ( AJAX , ):"
Response.write decodestr(reg)
%>
결과 도 정상 입 니 다.정말 좋 습 니 다!그러나 일반적으로 AJAX 가 서버 에 보 내 는 데 이 터 는 응용 해 야 한다.그렇지 않 으 면 의미 가 없다.데이터 가 똑 같은 지 더 검증 하기 위해 나 는 서버 측 을 작은 수정 을 했다.다음 과 같다.
var regcode=" :! @ # $& * ( ・・) = : / ; ? + , 。";
매우 흥분 했다.클 라 이언 트 가'동일'을 출력 하면 안심 하고 전면적으로 응용 할 수 있 습 니 다.요약:1.AJAX 클 라 이언 트 는 encodeURIComponent()를 이중 으로 사용 하여 POST 에 대한 데이터 인 코딩 을 사용 합 니 다.2.서버 측 에서 decodeURIComponent()이중 으로 디 코딩 하면 됩 니 다.")document.write(decodeURI(test 1))
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AJAX의 도메인 간 액세스 - 두 가지 효과적인 해결 방법 소개새로운 W3C 정책은 HTTP 크로스 도메인 접근을 실현했고 제가 오랫동안 이 문제를 해결한 덕분입니다. servlet에서 되돌아오는 머리 정보에 Access-Control-Allow-Origin을 추가하면 됩니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.