ajax代理程式自動判斷字元編碼

來源:互聯網
上載者:User
ajax|編碼|程式

由於ajax在跨域的訪問上有問題,目前最好的方法是做代理.寫了個代理程式和心得.

為了做ajax的代理,研究了下伺服器端的xmlhttp並和用戶端的ajax中的xmlhttp做了個比較,後台代碼是asp的.

伺服器端的xmlhttp也就是asp小偷程式,我把代碼改成了javascript.

1.在伺服器端的xmlhttp.Open("GET",url,false)非同步必須是關閉的,而用戶端的非同步是開啟的,這個很好理解.
2.在伺服器端的xmlhttp.Responsebody 這裡用的是Responsebody而不是ResponseText或ResponseXml,一開始我是用ResponseText,但在函數bytesToBSTR轉換編碼的時候提示錯誤,經過比較發現其他的asp小偷程式裡的代碼都是Responsebody,分析後,發現body返回來的是位元據而不是像ResponseText或ResponseXml那樣返回字元或dom對象.

ajax的asp代理函數介紹:
send_request(url) ,url為地址

伺服器端代碼如下帶自動判斷所有字元編碼,已測試 日語 韓語 繁體:

<%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"

"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>XMLHTTP</title>
</head>
<%

Server.ScriptTimeout=9999999;
function send_request(url) {
 var codedtext;
 http_request = Server.CreateObject("Microsoft.XMLHTTP");
 http_request.Open("GET",url,false);
 http_request.Send(null);
 if (http_request.ReadyState == 4){
  //自動判斷編碼開始
  var charresult = http_request.ResponseText.match(/CharSet=(\S+)\">/i);
  if (charresult != null){
  var Cset = charresult[1];
  }else{Cset = "gb2312"}//對擷取不到的網站採用gb2312編碼,可自行更改
  
//自動判斷編碼結束
  codedtext = bytesToBSTR(http_request.Responsebody,Cset);
  }else{
  codedtext = "Erro";
  }
 return(codedtext);
}

function bytesToBSTR(body,Cset){
var objstream;
objstream = Server.CreateObject("Adodb.Stream");
objstream.Type = 1;
objstream.Mode = 3;
objstream.Open();
objstream.Write(body);
objstream.Position = 0;
objstream.Type = 2;
objstream.Charset = Cset;
bytesToBSTR = objstream.Readtext;
objstream.Close;
return(bytesToBSTR);
}

%>
<body>
<% Response.Write(send_request("http://www.daum.net")) %>
</body>
</html>

作者:llinzzi 

<

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.