GB 2312 사이트 로 인 코딩 하여 AJAX 가 받 은 데이터 표시 지원 중국어

4471 단어 GB2312AJAX중국어.
 
<script>
var xmlHttp;
var BrowerType="ie";
function createXML(){
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();
BrowerType = "ff"; // , 。
}
}
function querytelcode(citys){
createXML();
showState=document.getElementById("showtelcode");
xmlHttp.onreadystatechange = function(){
if (xmlHttp.readyState == 2){
showState.innerHTML = '<img src="/img/process.gif" />';
}else if (xmlHttp.readyState == 4 && xmlHttp.status == 200){
if (BrowerType=="ff"){
getLastCode=xmlHttp.responseText;//FireFox
}else{
getLastCode=gb2utf8(xmlHttp.responseBody);
}
showState.innerHTML = getLastCode;
}
}
var url='myorderAjax.asp?oid=<%=Request.QueryString("orderid")%>&cityname='+citys;
xmlHttp.open ("GET",url,true);
if (BrowerType=="ff"){
xmlHttp.overrideMimeType("text/html;charset=gb2312");// gb2312 , FF 。IE
}
xmlHttp.send(null);
}
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("%"));
}
</script>
다음은 이 글 의 전문 입 니 다.XML HttpRequest 는 기본적으로 UTF-8 로 데 이 터 를 전달 합 니 다.서버 의 반환 데이터 가 UTF-8 인 코딩 일 때 잘 작 동 합 니 다(웹 애플 리 케 이 션 을 개발 하고 서버 와 클 라 이언 트,데이터 베 이 스 를 통일 적 으로 사용 하면 어 지 러 운 문 제 를 효과적으로 피 할 수 있 습 니 다).서버 에서 정확 한 Content-Type Response Header 와 인 코딩 정 보 를 설정 하면 XmlHttpRequest 도 정확하게 작 동 할 수 있 습 니 다.그러나 XML HttpRequest 를 사용 하여 중국어 웹 페이지 의 내용 을 읽 을 때 서버 의 프로그램 이 Content-Type Response Header 를 설정 하지 않 았 거나 Header 가 인 코딩 형식 을 설정 하지 않 았 다 면 responseText 속성 에 접근 할 때 오류 가 발생 할 수 있 습 니 다.예 를 들 어 다음 코드 는 XML HttpRequest 로 야후 중국 사이트 의 별자리 사이트 첫 페이지 를 가 져 옵 니 다.마찬가지 로 안 타 깝 게 도 FireFox 와 IE 의 해결 방법 도 서로 다른 방법 입 니 다.FireFox 의 XML HttpRequest 대상 은 overrideMime Type 방법 을 지원 합 니 다.데 이 터 를 되 돌려 주 는 인 코딩 유형 을 지정 할 수 있 습 니 다.이 방법 을 이용 하면 중국어 난 코드 를 해결 할 수 있 습 니 다.앞의 코드 는 다음 과 같 습 니 다
 
xmlhttp = getXMLHttpRequest();
var url = "http://cn.astrology.yahoo.com/";;
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4)
if (xmlhttp.status == 200)
alert(xmlhttp.responseText);
};
xmlhttp.send(null);
Internet Explorer 방법:IE 는 overrideMime Type 방법 을 지원 하지 않 습 니 다.또한 아주 어 설 픈 방법 으로 만 해결 할 수 있 습 니 다.이 때 교잡 함 수 를 도입 해 야 합 니 다.그 러 니까 교잡 함수 라 는 거 야.blueidea 포럼 에서 제공 한 알고리즘 에 감 사 드 립 니 다.해결 방법 은 있 지만 형식 이 추 하고 웹 기준 에 맞지 않 습 니 다.따라서 웹 애플 리 케 이 션 을 개발 하려 면 UTF-8 인 코딩 을 사용 하거나 서버 에 정확 한 인 코딩 정 보 를 설정 해 야 합 니 다.이 같은 범례 에 대해 서 는 다른 사이트 의 내용 을 훔 친 혐의 가 있 으 며,더욱 권장 되 지 않 는 다.첨부:토론:이유:AJAX 는 responseText 나 responseXML 의 값 을 받 을 때 UTF-8 형식 으로 디 코딩 합 니 다.서버 세그먼트 에서 보 낸 데이터 가 UTF-8 형식 이 아니라면 responseText 나 responseXML 의 값 을 받 는 것 은 어 지 러 울 수 있 습 니 다.해결 방법:서버 에서 데 이 터 를 보 내 는 형식 을 지정 합 니 다.jsp 파일 에서 response.setContentType("text/text;charset=UTF-8");//txt 텍스트 파일 이나 response.set ContentType("text/xml;charset=UTF-8");//되 돌아 오 는 xml 파일 PHP:header('Content-Type:text/html;charset=GB2312'); ASP:Response.Charset("GB2312") JSP:response.setHeader("Charset","GB2312"); 토론:PHP:헤더('Content-Type:text/html;charset=GB2312'); 이렇게 쓰 는 것 은 작은 프로젝트 가 아 닌 큰 프로젝트 가 프레임 워 크 에 따라 가 는 것 입 니 다.HEADER 가 config 파일 의 맨 앞 에 정 의 된 솔 루 션 은 JS 에서 utf-8xml 를 해석 하 는 방법 이 있 습 니 다. traindiy

좋은 웹페이지 즐겨찾기