亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > XML > 正文

用XMLHTTP Post/Get HTML頁面時的中文亂碼之完全Script解決方案

2024-07-21 02:04:26
字體:
來源:轉載
供稿:網友
以前我曾經貼過一篇用xmlhttp post form 的帖子,那里的代碼中我post e文的value毫無問題,但是后來發現post含有中文的表單時會出現亂碼,原因當然是utf-8 和gb2312 之間的轉換問題了!tnnd,打倒gb2312!大家都用utf8多好。

用xmlhttp post form時的表單亂碼有兩方面的原因——post表單數據時中文亂碼;服務器response被xmlhttp不正確編碼引起的亂碼。換句話說,本文主要解決兩個問題——怎樣正確post中文內容&怎樣正確顯示得到的中文內容。

part i post中文內容

先看看e文的表單是怎么提交的:

<script language="javascript">
stra = "submit1=submit&text1=scsdfsd";
var oreq = new activexobject("msxml2.xmlhttp");
oreq.open("post","http://servername/vdir/tstresult.asp",false);
oreq.setrequestheader("content-length",stra.length);
oreq.setrequestheader("content-type","application/x-www-form-urlencoded");
oreq.send(stra);
</script>

如果把stra = "submit1=submit&text1=scsdfsd";換成:
stra = "submit1=submit&text1=中文";

你會發現提交上去的東東根本不對,asp中request.form("text1")根本取不到值。俺用request.binaryread把一個html form中的post內容寫出來看了看,才發現問題——form提交時也要編碼的,編碼后的中文是類似于%??%??的轉義字符,比如“中文”就被編碼為:%d6%d0%ce%c4。呵呵,也怪俺笨,人家content-type里明明寫的清清楚楚——application/x-www-form-urlencoded,urlencoded嘛當然就是這個樣子了。既然這樣,那我們也知道該怎么辦了——自己做轉換,代碼見下:

<script language="vbscript">
function urlencoding(vstrin)
strreturn = ""
for i = 1 to len(vstrin)
thischr = mid(vstrin,i,1)
if abs(asc(thischr)) < &hff then
strreturn = strreturn & thischr
else
innercode = asc(thischr)
if innercode < 0 then
innercode = innercode + &h10000
end if
hight8 = (innercode and &hff00)/ &hff
low8 = innercode and &hff
strreturn = strreturn & "%" & hex(hight8) & "%" & hex(low8)
end if
next
urlencoding = strreturn
end function

stra = urlencoding("submit1=submit&text1=中文")
oreq = createobject("msxml2.xmlhttp")
oreq.open "post","http://servername/vdir/tstresult.asp",false
oreq.setrequestheader "content-length",len(stra)
oreq.setrequestheader "content-type","application/x-www-form-urlencoded"
oreq.send stra
</script>

(在這里俺把前面的javascript的代碼改成了vbscript,不是吃飽了撐的沒事干,原因見后)

part ii.正確顯示得到的中文內容

ok,如果你在server端把form的內容寫到數據庫/文件的話,你在那里看到的中文毫無問題,但是,假如你想看看server的response——問題來了:如果response的結果不是xml,xmlhttp.responsexml里當然是不會有東東的,那就用responsetext好了,在代碼的最后加一句:

alert(oreq.responsetext)
看看俺們辛勤勞動的結果 :p

但是但是.....怎么所有的中文全變成了方格? (我打不出來,有興趣自己去試,也不用post,get一個含有中文的網頁就可以發現了。)

原因很簡單:xmlhttp得到response時假定response是utf8編碼的,如果response是xml,那還可以通過encoding來指定編碼,但html就不行了。(見鬼的gb2312,再次打倒?。┧运押琯b2312編碼的html當成utf8格式,不出錯才有鬼!

不過好在還有補救的辦法:xmlhttp的responsebody 屬性里包含的可是未解碼的resonse——"a raw undecoded bytes as received directly from the server" :),唯一的問題是,responsebody返回的是一個unsigned bytes數組,我們怎么去訪問它,怎么把它轉換成bstr?

這就是為什么我在上面把代碼改成vbscript的原因——vbscript can do it,but javascript cannot!

代碼見下:
<script language="vbscript">
function urlencoding(vstrin)
strreturn = ""
for i = 1 to len(vstrin)
thischr = mid(vstrin,i,1)
if abs(asc(thischr)) < &hff then
strreturn = strreturn & thischr
else
innercode = asc(thischr)
if innercode < 0 then
innercode = innercode + &h10000
end if
hight8 = (innercode and &hff00)/ &hff
low8 = innercode and &hff
strreturn = strreturn & "%" & hex(hight8) & "%" & hex(low8)
end if
next
urlencoding = strreturn
end function

function bytes2bstr(vin)
strreturn = ""
for i = 1 to lenb(vin)
thischarcode = ascb(midb(vin,i,1))
if thischarcode < &h80 then
strreturn = strreturn & chr(thischarcode)
else
nextcharcode = ascb(midb(vin,i+1,1))
strreturn = strreturn & chr(clng(thischarcode) * &h100 + cint(nextcharcode))
i = i + 1
end if
next
bytes2bstr = strreturn
end function

stra = urlencoding("submit1=submit&text1=中文")
oreq = createobject("msxml2.xmlhttp")
oreq.open "post","http://servername/vdir/tstresult.asp",false
oreq.setrequestheader "content-length",len(stra)
oreq.setrequestheader "content-type","application/x-www-form-urlencoded"
oreq.send stra
alert bytes2bstr(oreq.responsebody)
</script>

嘿嘿,是不是很簡單啊,用這個再試試看?一切ok!

(順便說說byte(),這個東東在vbscript里的表現只能用妖來形容——對它調用vartype 返回8209——vbarray + vbbyte,用lbound、ubound能拿到數組的上界下界,但是就是不能用name(i)的形式訪問,搞得我以為在script里根本沒法處理這種類型,在bytes2bstr函數里可以看到我是把它當成string來處理的——lenb/midb什么的,發現這點純屬意外——我開始往這個函數里傳的是xmlhttp.responsetext,想一個byte一個byte地看看里面到底有點什么,后來一時性起把responsetext改成responsebody,結果就中獎了,哈哈)

最后的廢話:
1、以上代碼在msxml parser 3 release+vbscript 5.5環境下通過。那位兄弟有早一點版本的script可以幫我試試看能不能成。
2、一直以為javascript vs vbscript應該是javascript略好,所以有時候想徹底拋棄vbscript,asp server/client統統用javascript,看來未必是個好主意。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
性色av一区二区三区免费| 揄拍成人国产精品视频| 日产精品久久久一区二区福利| 亚洲国产黄色片| 欧美中文字幕在线视频| www.日韩系列| 亚洲精品乱码久久久久久按摩观| 欧美精品18videosex性欧美| 欧美日韩国产页| 久久久久久久久久久国产| 日韩中文视频免费在线观看| 成人久久18免费网站图片| 97视频免费观看| 欧美贵妇videos办公室| 中文字幕国产亚洲| 亚洲黄一区二区| 91色精品视频在线| 色无极亚洲影院| 精品少妇v888av| 日韩在线视频播放| 成人免费直播live| 欧美最猛黑人xxxx黑人猛叫黄| 92看片淫黄大片看国产片| 91在线观看免费高清| 亚洲精品91美女久久久久久久| 伊人男人综合视频网| 日韩精品视频免费专区在线播放| 国产精品视频一区二区高潮| 97婷婷大伊香蕉精品视频| 欧美电影院免费观看| 红桃av永久久久| 亚洲精品电影网在线观看| 亚洲欧美日韩精品久久奇米色影视| 欧美激情中文字幕乱码免费| 中文日韩在线视频| 国产一区二区三区在线视频| 黑人巨大精品欧美一区二区三区| 日韩a**站在线观看| 亚洲va欧美va在线观看| 国产精品久久久久久久美男| 国产精品久久久久久久久久久久久| 91免费看片在线| 亚洲欧美日韩国产精品| 久久99久国产精品黄毛片入口| 亚洲综合中文字幕68页| 久久琪琪电影院| 欧美香蕉大胸在线视频观看| 黄色一区二区在线观看| 国产在线精品一区免费香蕉| 亚洲国产一区二区三区在线观看| 国产精品99久久久久久白浆小说| 成人精品在线观看| 久久不射热爱视频精品| 国产一区二区三区在线视频| 日韩欧美国产黄色| 日韩在线免费视频观看| 欧美丰满少妇xxxx| 国产免费一区二区三区香蕉精| 国产成人久久久| 黄色精品一区二区| www.亚洲免费视频| 91情侣偷在线精品国产| 久久久久久久色| 亚洲三级av在线| 国产成人+综合亚洲+天堂| 欧美孕妇毛茸茸xxxx| 国产精品视频免费观看www| 日本高清视频一区| 欧美麻豆久久久久久中文| 色偷偷偷亚洲综合网另类| 久久久久久亚洲精品不卡| 日韩在线视频中文字幕| 久久国产精品久久国产精品| 日韩中文有码在线视频| 久久伊人色综合| 国产极品jizzhd欧美| 久久99精品国产99久久6尤物| 久久精品免费电影| 国产欧美一区二区三区久久人妖| 岛国av在线不卡| 1769国内精品视频在线播放| 色综合天天狠天天透天天伊人| 国产suv精品一区二区三区88区| 欧洲精品在线视频| 2019中文字幕免费视频| 欧美最顶级丰满的aⅴ艳星| 日韩中文字幕第一页| 久久久亚洲影院| 91美女福利视频高清| 亚洲色图25p| 欧美日韩中文字幕日韩欧美| 久久久久久久久久国产精品| 裸体女人亚洲精品一区| 热久久99这里有精品| 欧美激情视频网| 国模吧一区二区三区| 精品久久久久久久久久ntr影视| 亚洲精品久久久久国产| 91亚洲精品一区| 91久久国产综合久久91精品网站| www日韩欧美| 日韩精品免费一线在线观看| 日韩av在线最新| 国产精品草莓在线免费观看| 久久久久久九九九| 亚洲一区www| 91chinesevideo永久地址| 久久九九免费视频| 久久视频在线播放| 亚洲人成电影在线观看天堂色| 91久久久精品| 亚洲a在线观看| 91久久精品在线| 日韩亚洲成人av在线| 精品电影在线观看| 成人av色在线观看| 国产精品福利观看| 日本午夜在线亚洲.国产| 国产精品久久久久久久久久久新郎| 日韩有码在线观看| 亚洲国产精彩中文乱码av| 日韩三级影视基地| 日韩精品亚洲元码| 中文字幕在线日韩| 曰本色欧美视频在线| 国产精品一区二区女厕厕| 中日韩美女免费视频网站在线观看| 亚洲人成电影在线观看天堂色| 久久99久久99精品免观看粉嫩| 亚洲乱码国产乱码精品精| 亚洲91精品在线观看| 久久久久日韩精品久久久男男| 狠狠色狠狠色综合日日小说| 国产玖玖精品视频| 中文字幕亚洲欧美一区二区三区| 国产成人精品网站| 精品国产一区二区三区久久久| 欧美另类99xxxxx| 国自产精品手机在线观看视频| 亚洲视频第一页| 91欧美精品午夜性色福利在线| 中文字幕亚洲一区二区三区| 亚洲最大的网站| 精品亚洲国产成av人片传媒| 国产精品成人av性教育| 国产成人精品久久久| 日本精品一区二区三区在线播放视频| 亚洲国产欧美一区| 欧美日韩亚洲系列| 欧亚精品中文字幕| 欧美成人黄色小视频| 久久亚洲精品中文字幕冲田杏梨| 欧美色另类天堂2015| 国内精品久久久久久影视8| 色视频www在线播放国产成人| 亚洲精品国精品久久99热一| 2018国产精品视频| 免费91麻豆精品国产自产在线观看| 久久精品2019中文字幕| 日韩久久精品成人| 国产精品国模在线| 91精品国产高清久久久久久| 亚洲高清久久久久久| 国产精品人成电影在线观看|