MozTW 討論區 https://forum.moztw.org/ |
|
java script 取回網站原始碼,用indexOf搜尋中文的問題 https://forum.moztw.org/viewtopic.php?f=18&t=19266 |
第 1 頁 (共 1 頁) |
發表人: | ericwang1017 [ 2007-06-10, 15:24 ] |
文章主題 : | java script 取回網站原始碼,用indexOf搜尋中文的問題 |
我在詳細說明我的問題好了 我是想做一個套件,放在statusbar,滑鼠一移上去,他就會用Ajax去外面抓匯率的資料,並且利用toolTipText顯示出來 我用Ajax取得 https://ibank.hncb.com.tw/netbank/servl ... e=chineseh 網站的原始碼,並且把他存msg到變數中 我用 var find = msg.indexOf("即時匯率",0) 去找,老是回傳-1 可是我用window.alert(msg)秀出原始碼時, 編碼又是正常的 另外 我去另一個網站又是不一樣的情況 我去 http://consumer.chinatrust.com.tw/ch/in ... _RATE.html 用Ajax取回來的中文是亂碼 而在tooltip顯示的也是亂碼 但是可以使用indexOf找到中文字 而這兩個網站的charSet都是big-5 照理來說,應該會有同樣的情況 另外我發現到,那個會回傳亂碼的網站(http://consumer.chinatrust.com.tw/ch/in ... _RATE.html ) 他網頁編碼是big5,我用firefox去瀏覽該網站,並把該網站的編碼強制設定為utf-8 看到的亂碼跟我用Ajax,秀在status-bar的tooltip是一模一樣的 我聽說用ajax去取得的編碼是utf-8,而套件的xul檔編碼應該也是utf-8,所以他把資料顯示成utf-8 不知道是不是這樣... 這是我的Script,外面的onmouseover是從show()開始 ============================= 代碼: var http_request = false;
var msg; //Ajax的部份 function makeRequest(url) { http_request = false; if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Giving up :( Cannot create an XMLHTTP instance'); return false; } //http_request.setRequestHeader( "Content-Type", "text/html;charset=big5" ); http_request.onreadystatechange = alertContents; http_request.open('get', url, true); http_request.send(null); } //移掉所有在該節點的元素 function removeAllChild(eleName){ var parent = document.getElementById(eleName); while (parent.hasChildNodes()){ parent.removeChild(parent.lastChild); } } //加一行到指定的 toolTipId 中 function addLine(toolTipId,msg){ var parent = document.getElementById(toolTipId); aEl = document.createElement("label"); aEl.setAttribute("value",msg); parent.appendChild(aEl); aEl=null; parent=null; } function showInTooltip(toolTipId,msg){ removeAllChild(toolTipId); var parent = document.getElementById(toolTipId); var high = msg.length/150; for(i=0; i<3; i++){ var aLine = msg.substring(0+i*150,150+i*150); addLine(toolTipId,aLine); aLine=null; } } function alertContents() { //window.alert(http_request.readyState); //window.alert(http_request.status); if (http_request.readyState == 4) { if (http_request.status == 200) { try{ msg = http_request.responseText; showInTooltip("erw-vbox",msg); var find1 = msg.match(/即時匯率/); var find2 = msg.indexOf(/即時匯率/); //window.alert(find1); //window.alert(find2); addLine("erw-vbox","aaaaaaaaaaaaaaaaaaaaaaaaaa"); addLine("erw-vbox",find2); }catch(err){ var errMsg; window.alert("err"); errMsg +="err.name = " + err.name + "\n"; errMsg +="err.message = " + err.message + "\n"; errMsg +="err.description = " + err.description + "\n"; window.alert(errMsg); } } else { alert('There was a problem with the request.'); } } } function show() { //正常編碼 makeRequest("https://ibank.hncb.com.tw/netbank/servlet/TrxDispatcher?trx=com.lb.wibc.trx.ExtSelect&state=prompt&rate=chinese"); //不正常編碼 //makeRequest("http://consumer.chinatrust.com.tw/ch/int_rate/EX_RATE.html"); } |
發表人: | kourge [ 2007-06-11, 06:12 ] |
文章主題 : | |
那如果用 msg.match(/即時匯率/) 行嗎? |
發表人: | ericwang1017 [ 2007-06-11, 10:06 ] |
文章主題 : | |
var find1 = msg.match(/即時匯率/); var find2 = msg.indexOf(/即時匯率/); window.alert(find1); window.alert(find2); 出現null與-1 看起來是都不行 >_< |
發表人: | ericwang1017 [ 2007-06-11, 15:53 ] |
文章主題 : | |
現在已經實驗了幾個網站... //charset = big5,卻正常編碼 //makeRequest("https://ibank.hncb.com.tw/netbank/servlet/TrxDispatcher?trx=com.lb.wibc.trx.ExtSelect&state=prompt&rate=chinese"); //charset = big5,卻不正常編碼 //makeRequest("http://consumer.chinatrust.com.tw/ch/int_rate/EX_RATE.html"); //utf-8,大陸網站 makeRequest("http://www.xe.com/zh/"); 只有不正常編碼那個網站的indexOf會順利找出中文字,其他都掛 而match我只有試過大陸網站,是可以抓到的,但是indexOf一樣掛 另外,XUL看起來像是XML,可是我想用 <?xml version="1.0" encoding="Big5"?> 強迫他使用big5解讀 似乎沒用 |
發表人: | ericwang1017 [ 2007-06-11, 16:58 ] | ||
文章主題 : | |||
後來不拘泥國內網站,跑去找國外網站就ok了 使用的是http://www.x-rates.com/d/TWD/table.html 網頁的資料 不過做這種擷取網站內容,在做Parse的動作,實在是dirty Work! 不過做了就做了,算是練習吧... 一度被中文編碼搞的氣死,做這個還是不要太拘泥中文資料比較好... 功能照片如下 ![]()
|
發表人: | ericwang1017 [ 2007-06-11, 18:22 ] |
文章主題 : | |
後來我發現台灣銀行有UTF-8的即時匯率 http://rate.bot.com.tw/Pages/Static/UIP003.zh-TW.htm 改了一下馬上又可以用了 代碼: var http_request = false;
var msg; //Ajax的部份 function makeRequest(url) { http_request = false; if (window.XMLHttpRequest) { // Mozilla, Safari,... http_request = new XMLHttpRequest(); if (http_request.overrideMimeType) { http_request.overrideMimeType('text/xml'); } } else if (window.ActiveXObject) { // IE try { http_request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http_request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {} } } if (!http_request) { alert('Giving up :( Cannot create an XMLHTTP instance'); return false; } //http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded;"); //http_request.setRequestHeader("charset","utf-8"); http_request.onreadystatechange = alertContents; http_request.open('get', url, true); http_request.send(null); } //移掉所有在該節點的元素 function removeAllChild(eleName){ var parent = document.getElementById(eleName); while (parent.hasChildNodes()){ parent.removeChild(parent.lastChild); } } //加一行到指定的 toolTipId 中 function addLine(toolTipId,msg){ var parent = document.getElementById(toolTipId); aEl = document.createElement("label"); aEl.setAttribute("value",msg); parent.appendChild(aEl); aEl=null; parent=null; } function showInTooltip(toolTipId,msg){ removeAllChild(toolTipId); var parent = document.getElementById(toolTipId); var high = msg.length/150; for(i=0; i<10; i++){ var aLine = msg.substring(0+i*150,150+i*150); addLine(toolTipId,aLine); aLine=null; } } function alertContents() { //window.alert(http_request.readyState); switch(http_request.readyState){ case 1: removeAllChild("erw-vbox"); addLine("erw-vbox","正在連接...") break; case 2: removeAllChild("erw-vbox"); addLine("erw-vbox","正在讀取...") break; case 3: removeAllChild("erw-vbox"); addLine("erw-vbox","正在交互...") break; case 4: if (http_request.status == 200) { try{ //window.alert(http_request.getAllResponseHeaders()); removeAllChild("erw-vbox"); msg = http_request.responseText; //showInTooltip("erw-vbox",msg); var result; result = findKeyWord("美金 (USD)",msg,2); addLine("erw-vbox","美金:" + result); result = findKeyWord("歐元 (EUR)",msg,2); addLine("erw-vbox","歐元:" + result); result = findKeyWord("港幣 (HKD)",msg,2); addLine("erw-vbox","港幣:" + result); result = findKeyWord("英鎊 (GBP)",msg,2); addLine("erw-vbox","英鎊:" + result); result = findKeyWord("澳幣 (AUD)",msg,2); addLine("erw-vbox","澳幣:" + result); result = findKeyWord("加拿大幣 (CAD)",msg,2); addLine("erw-vbox","加拿大幣:" + result); result = findKeyWord("日圓 (JPY)",msg,2); addLine("erw-vbox","日圓:" + result); }catch(err){ var errMsg=""; errMsg +="name :" + err.name + "\n"; errMsg +="message : " + err.message + "\n"; errMsg +="description : " + err.description + "\n"; window.alert(errMsg); } } else { alert('There was a problem with the request.'); } } } function show() { //正常編碼 //makeRequest("https://ibank.hncb.com.tw/netbank/servlet/TrxDispatcher?trx=com.lb.wibc.trx.ExtSelect&state=prompt&rate=chinese"); //不正常編碼 //makeRequest("http://consumer.chinatrust.com.tw/ch/int_rate/EX_RATE.html"); //utf-8,大陸網站 //makeRequest("http://www.xe.com/zh/"); //國外網站 //makeRequest("http://www.x-rates.com/d/TWD/table.html"); //台灣銀行 UTF-8 makeRequest("http://rate.bot.com.tw/Pages/Static/UIP003.zh-TW.htm"); } function findKeyWord(keyWord,source,cellNo){ var startWord = "/Images/Flags/America.gif"; var endWord = "</td><td class="; //通常是Table的起始 var startIdx = source.indexOf(startWord); //從table的起點往後找KeyWord var keyWordIdx = source.indexOf(keyWord,startIdx); //從keyword往後找結束符號 var temp = keyWordIdx; for(i=0; i<cellNo; i++){ temp = source.indexOf(endWord,temp)+1; } endIdx = temp-1; //從EndIndex往前找,找>關鍵字,但是要往前移一個 var curIdx = source.lastIndexOf(">",endIdx)+1; return source.substring(curIdx,endIdx); } |
第 1 頁 (共 1 頁) | 所有顯示的時間為 UTC + 8 小時 |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |