引數傳遞的瀏覽器差異

2021-08-29 17:17:25 字數 1315 閱讀 2477

情況大體是這樣的:乙個頭頁面header.jsp上有乙個搜尋框,輸入關鍵字之後提交到另乙個搜尋頁面search.jsp輸出搜尋結果;header.jsp在業務應用下,search.jsp在發布系統的應用下,兩個應用使用同乙個tomcat。關鍵字keyword作為引數傳遞到搜尋頁面search.jsp,也就是window.location.href='search.jsp?keyword=關鍵字'。兩個頁面設定的編碼格式都是utf-8;但是具體測試中出現了很奇怪的問題,就是在firefox下一切正常,引數傳遞是正常的,搜尋中文英文都沒有問題;但是在ie下就不行了,搜尋漢字時,漢字個數是偶數個時一切正常,奇數個時最後乙個漢字接受過來就是亂碼;也就是說,search.jsp?keyword=關鍵,這樣是正常的,但是search.jsp?keyword=關鍵字,這樣時你取到的keyword引數最後乙個字「字」就是亂碼。 查了不少資料,說漢字在utf-8編碼格式下是佔3個位元組的,而在unicode編碼格式下是佔2個位元組,引數傳遞的時候需要在unicode編碼格式下傳遞,所以不管你頁面中設定的是什麼編碼格式,傳遞之前瀏覽器都會給你自動做編碼轉化。當漢字個數是偶數個的時候,位元組總數也是偶數可以被正常轉化,但是當漢字個數是奇數時,位元組總數是奇數,無法被2整除,所以最後乙個漢字顯示亂碼。至於firefox下為什麼正常,估計是firefox下引數的編碼格式轉化機制不同所致。

查詢到不少解決辦法,有的說用js的encodeuri進行一次編碼轉換,有的也說用post方式傳遞,試了之後都不行。 最後的解決辦法是在傳遞之前就對關鍵字進行一次編碼格式的轉換,這是網上的**:

function encodeutf8(s1) 

for(var i = 1; i < sa.length; i ++)

else retv += "%" + sa[i];

} return retv;

} function str2hex(s)

//return value;

return digs;

} function dec2dig(n1)

else

s += '0';

} return s;

} function dig2dec(s)

return retv;

} return -1;

} function hex2utf8(s)

return rets;

} return "";

}

不過,這樣編碼轉換只是針對ie瀏覽器,如果在firefox下也這樣操作會出現亂碼的。無奈,需要新增乙個瀏覽器型別的判斷。 以上是我自己的理解,有經驗的朋友歡迎交流。

瀏覽器差異

移動端瀏覽器沒報錯無法看報錯資訊 移動端真機除錯,引入vconsole array.prototype.slice.call document.getelementbyid test childnodes 用上面的方法可以把 id 為 test 的子節點轉換成陣列 ie8及之前不能直接這樣使用 解決...

瀏覽器css差異

一 css選擇器差異 乙個css的ie和ff差異,popup container alert 在ie6下alert類只能作用於 popup container的子元素。ff下alert類可以作用於 popup container和其子元素。二 z index在ie中的迷惑 z index屬性適用於定...

瀏覽器差異記錄

1.content home content 問題補充 我知道是寬度,width 與 width 區別是什麼,哦,謝謝。回答 下劃線 ie6支援下劃線,ie7和firefox等均不支援下劃線。你那個 的意思就是ie6下面寬度 449px 其他瀏覽器下寬度 460px 2.把乙個做為背景,在上面輸入文...