复制代码 代码如下:
<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>
以下是此篇文章全文:
XMLHttpRequest 默认是用UTF-8 传递数据。当服务端的返回数据是UTF-8编码的时候,它工作得很好(开发web应用,当服务端和客户端以及数据库统一使用UTF-8编码可以有效的避免乱码问题)。如果服务端设置了正确的Content-Type Response Header以及编码信息,那么XmlHttpRequest也可以正确工作。
可是当使用XMLHttpRequest读取中文网页内容时, 如果服务端的程序没有设置Content-Type Response Header,或者Header没有设置编码类型,那么我们访问responseText属性的时候就可能遭遇乱码。如以下代码用XMLHttpRequest获取雅虎中国网站的星座站首页:
复制代码 代码如下:
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);
纵使yahoo中国这样专业的网站,对web标准的支持还很不彻底,弹出的html源码中充斥不符合web标准的html标签,当然还有已预见的乱码。
同样遗憾的是,FireFox 和 IE 的解决方法也是南辕北辙
FireFox 做法:
FireFox 的XMLHttpRequest对象支持overrideMimeType方法,可以指定返回数据的编码类型,利用该方法可以解决中文乱码,前面的代码修改如下:
复制代码 代码如下:
xmlhttp = getXMLHttpRequest();
var url = "http://cn.astrology.yahoo.com/";;
xmlhttp.open("GET", url, true);
xmlhttp.overrideMimeType("text/html;charset=gb2312");//设定以gb2312编码识别数据
xmlhttp.onreadystatechange = function(){
if (xmlhttp.readyState == 4)
if (xmlhttp.status == 200)
alert(xmlhttp.responseText);
};
xmlhttp.send(null);
Internet Explorer 做法:
IE不支持overrideMimeType方法,并且只能用一种很蹩脚的方法来解决,此时需要引入一个杂交的函数:
复制代码 代码如下:
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("%"));
}
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(gb2utf8(xmlhttp.responseBody)); //注意这里要用responseBody
};
xmlhttp.send(null);
gb2utf8函数直接解析XMLHttpRequest返回的二进制数据,其中要利用execScript方法来执行VBScript的函数。所以说是一个杂交的函数。感谢blueidea论坛 提供的算法。
虽然有了解决的办法,但形式丑陋,而且不符合web标准。所以应该在编程中尽量避免,如果是开发web应用,应尽量使用UTF-8编码,或者在服务端设置正确的编码信息。至于以上范例,有盗取其他网站内容的嫌疑,更是不为提倡。
附一篇:讨论:
原因:AJAX在接收responseText或responseXML的值的时候是按照UTF-8的格式来解码的,如果服务器段发送的数据不是UTF-8的格式,那么接收responseText或responseXML的值有可能为乱码。
解决办法: 在服务器指定发送数据的格式:
在jsp文件中:
response.setContentType("text/text;charset=UTF-8");//返回的是txt文本文件
或是
response.setContentType("text/xml;charset=UTF-8");//返回的xml文件
PHP:header('Content-Type:text/html;charset=GB2312');
ASP:Response.Charset("GB2312")
JSP:response.setHeader("Charset","GB2312");
讨论:
PHP:header('Content-Type:text/html;charset=GB2312');
这样写除非是小项目
大项目都是按照框架走
对于HEADER定义于config文件最前端解决方案
在JS里有一个解析utf-8xml的方法写的非常强
建议用那
非物理生命
traindiy
相关推荐:
SEO优化大全:让你的网站排名轻松破局,精准引流更高效!,274357524ai
为什么做抖音seo,为什么做抖音推广 ,描边ai虚线
ChatGPT出现报错503?这些解决办法你必须知道!,粉墨ai说唱
好用的人工智能AI软件推荐,让你的生活更智能!
什么是SEO金融,seo是做什么的 ,ai中转程序
seo营销方法是什么,seo营销模式 ,ai山海
seo要会些什么,seo需要学些什么内容 ,轻盈ai
SEO实际:如何在竞争激烈的市场中脱颖而出,dz论坛seo如何设置
ChatGPT免费版下载:智能对话助手带来的全新体验,电脑怎么下载Ai微认证
为什么要做seo si,为什么要做* ,ai里面怎么扣二维码
ChatGPT3.5最新版:智能对话新纪元,带你进入AI的未来世界,ai苔藓生长
内容创作新时代:自动生成文章的AI如何改变写作生态
为什么说seo重要,为什么说seo重要一点 ,中通智能ai是什么意思
SEO合同:确保您网站优化成功的关键保障,微博营销推广规则最新
OpenAI无法验证支付方式?解决方案与常见问题解析,你好月光ai
SEO资讯:最新趋势,提升网站排名,快速突破流量瓶颈,廊坊seo推广咨询服务
SEO获取流量的必杀技:如何通过优化轻松提升网站排名,德州全网营销推广价格
AI免费写文章生成器高效写作新革命
AI缩短短文-提升创作效率,写作新体验,光速写作业ai写作app
Zkept:重塑未来生活的智能科技革新,营销推广的面试问题
2025百度收录优化:提升网站排名,助力企业数字化转型,第一ai做
SEO数量-如何提升你的网站排名与流量?,射阳seo优化五星服务
seo软件是什么职位,seo用的是什么软件 ,ai感知树
SEO本站:提升网站流量与排名的秘密武器,荆门专业的抖音seo
什么是神马排名?让你的网站脱颖而出,轻松占据搜索引擎的C位!,乳山网站优化关键词排名
seO经理是什么岗位,seo经理招聘 ,ai写作重复被查
《命运交错的轨迹:小说背后的无尽魅力》,seo优化huifachina
SEO行销:开启网站流量增长的秘密武器,百威产品关键词查询排名
AI代写文章:高效创作的新风尚
seo进阶买什么书运营,seo入门难吗 ,没有ai软件怎么打开ai图片
SEO表格:优化网站排名的秘密武器,大数据推广营销费用多少
优方法-高效生活与工作的秘密武器,钻石营销推广方案
一键创作,助你轻松实现创意梦想,最低价刷粉网站推广
ChatGPT美区要梯子吗?轻松畅享全球智能聊天体验,ai音位
seo资源指的是什么,seo资料 ,绿眼AI
怎样用AI写文章?快速高效创作新技能!
seo竞价做的什么工作,seo 竞价 ,office智能ai
AI通过算法和数据生成的作品:科技与艺术的跨越,带来无限创意可能,ai优化程序
怎样使用AI写文章:释放创作潜能,提升写作效率
目前AI软件有哪些?智能新时代的必备工具
SEO调整,助力网站流量爆发式增长!,江都seo优化排名
SEO引擎优化方法-让你的网站流量暴增的实战指南,ai智慧树
WP原创:打造属于你的独特网站,从这里开始!,一个网站推广一个月需要多少钱
为什么要seo 运营,为什么需要seo ,ai人物头盔
怎么查一篇文章是不是AI写的?你需要这几个关键方法!
ChatGPT恢复正常使用时间,提升你的工作与生活效率,联想电脑AI0510
亚马逊seo信息是什么,亚马逊seo关键词优化软件 ,光谷ai
ChatGPT无法加载?检查您的网络设置并尝试重启ChatGPT,助您畅享无障碍智能对话体验,ai记录人
SEO工装裤-打造时尚与实用兼备的工作利器,ai画中国爸爸辅导孩子写作业
SEO文案:如何通过巧妙布局提升网站排名,吸引更多流量,娄底网站建设工作文案