emu in blogjava

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks
          在跨業務、跨網站發送數據或者業務升級的時候,我們有的時候需要指定發送數據的編碼方式,比如頁面是utf-8編碼的,而發送出去的數據卻是GB2312編碼的。在做Ajax開發的時候,我們往往都是用vbscript或者用查字典法來解決這個問題(http://www.aygfsteel.com/emu/articles/31756.html)。但是有些業務,也許并不需要做成Ajax這么復雜,用表單提交顯得更加自然。

          其實html里面form標簽有個accept-charset屬性,可以幫助我們解決這個問題,可惜的是傻乎乎的IE瀏覽器雖然認得accept-charset,卻并不賣它的帳。IE的表單提交的時候使用什么編碼是完全看頁面的charset決定的。還好,IE在charset這個問題上一傻到底(見http://www.aygfsteel.com/emu/archive/2007/08/21/138247.html),糊弄它一下,它就乖乖聽話了:
          <HTML>
          <HEAD>
              
          <meta http-equiv=content-type content="text/html; charset=UTF-8">
              
          <SCRIPT LANGUAGE="JavaScript">
                  
          var isIE=!!window.ActiveXObject;
                  
          if(isIE && document.charset!="utf-8")location.reload(false);
                  
          if(location.search) alert("“我”字編碼為:"+location.search.substr(6))
              
          </SCRIPT>
              
          <TITLE>encode before form post</TITLE>
              
          <META NAME="Author" CONTENT="emu">
          </HEAD>
          <BODY>
              
          <form action="#" accept-charset="GB2312" onsubmit="if(isIE)document.charset='GB2312'">
                  
          <input name="test" value="我" readonly>
                  
          <input type=submit>
              
          </form>
          </BODY>
          </HTML>

          簡單的講,就是在表單發送前告訴IE說當前頁面是GB2312編碼就行了:
           <form accept-charset="GB2312" onsubmit="if(isIE)document.charset='GB2312'">
          accept-charset="GB2312" 是寫給其他沒那么笨的瀏覽器看的。

          IE為了表現它確實是一傻到底,不但在設置document.charset的時候不會用新的編碼解釋頁面,還會在前進后退(我特地用#作為action來實現后退)的時候又嘗試用新的編碼去解釋頁面。不過還好,可以用腳本判斷出來,還可以用腳本刷新一下頁面解決這個問題:
          if(isIE && document.charset!="utf-8")location.reload(false);
          posted on 2008-01-31 17:31 emu 閱讀(4449) 評論(5)  編輯  收藏

          評論

          # re: 在IE下面指定表單編碼方式 2008-02-17 12:49 93ttp
          不錯,好東西  回復  更多評論
            

          # re: 在IE下面指定表單編碼方式 2009-05-15 17:18 魔獸私服
          這個BUG我沒有遇到過哦,只有高級的人才遇到的吧?  回復  更多評論
            

          # 十分強大 2009-06-19 19:04 十分強大
          十分強大  回復  更多評論
            

          # re: 在IE下面指定表單編碼方式 2011-08-17 15:12 回轉窯
          謝謝分享 很不錯 、、  回復  更多評論
            

          # re: 在IE下面指定表單編碼方式 2011-09-09 01:04
          太好了,頂你,我還在煩這個問題呢,雖然沒有太大的影響。  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 贺州市| 高平市| 壤塘县| 海宁市| 宝丰县| 遂昌县| 盐池县| 南京市| 滨海县| 宣汉县| 灌云县| 沂水县| 水城县| 民勤县| 白水县| 靖边县| 新龙县| 万盛区| 颍上县| 虎林市| 勃利县| 云南省| 陆良县| 修水县| 通州区| 九寨沟县| 昌乐县| 东乌珠穆沁旗| 资兴市| 延寿县| 灵川县| 盱眙县| 治县。| 三门县| 南部县| 通渭县| 静乐县| 舟山市| 内黄县| 封丘县| 怀宁县|