表單資料提交時的字元編碼問題

2021-08-23 12:52:12 字數 1662 閱讀 1407

人老了,以前研究過的東西都忘記了。所以還是記錄下來比較好。

廢話不說,[url=翠花[/url],上**:

如果你總是使用utf-8編碼,則基本不用為編碼問題傷腦筋。但是總有些時候,事情超出了你的掌控範圍。

通常表單提交時將按照文件本身的編碼進行編碼。如果是乙個gb2312的文件,如何按照utf-8編碼提交呢?此外是否可以通知伺服器,請求是按照何種方式編碼的呢?

以上**測試了瀏覽器為此類問題所提供的各種特性。可將上述**儲存為不同的編碼,如utf-8、gb2312、big5等(可以加上meta httpequiv=content-type content=text/html;charset=[i]***[/i]),然後進行測試(即修改document.charset和form.acceptcharset然後提交,觀察url引數的結果)。

以下是一些瀏覽器的測試結果(僅測試了get請求):

支援document.charset 支援form.acceptcharset 支援_charset_

ie6 y n* y

ff2 n y y

safari3 y y n

chrome1 y y n

opera9 n* y y

由於手頭安裝的瀏覽器有限,有興趣的同志可幫忙測試一下ie5、ie7、ie8、ff3以及其他瀏覽器。

說明:1. document.charset

可獲得文件的字元編碼。

也可改寫,從而影響到表單提交時所採用的編碼。在ie中改變charset還會影響網頁的字型。

ie專有屬性,webkit引擎也實現了該屬性。ff2不支援,雖然有乙個document.characterset屬性,但是唯讀。opera9雖然可通過charset屬性讀取字元編碼,但是改寫該屬性似無意義。

2. form.acceptcharset

按照html4規範,form上的accept-charset屬性(dom中為acceptcharset)表示伺服器可接受的編碼列表(以空格或逗號分割多種編碼)。瀏覽器應選取其中一種ascii相容的編碼(具體選擇哪種,各瀏覽器自行決定——比如chrome雖然也用webkit引擎,但是在選擇編碼方面似乎與safari有一些不同)作為表單資料的編碼。

ie6雖然有acceptcharset屬性,但是無效果。(然而據一封古老的微軟工程師在unicode組織郵件列表裡的郵件表明,ie5也許支援?有興趣同志可以測試一下。)

3. _charset_

當表單包含乙個name為_charset_的hidden型別input,表單提交時,_charset_的value會被設為表單資料的字元編碼。

ie5開始支援此特性。ff團隊follow了此特性([url]

上述3個特性皆納入了[url=規範草案[/url]。

JSON編碼格式提交表單資料

以json編碼格式提交表單資料是html5對web發展進化的又一大貢獻,以前我們的html表單資料是通過key value方式傳輸的伺服器端,這種形式的傳輸對資料組織缺乏管理,形式十分原始。而新出現的json格式提交表單資料方法,將表單裡的所有資料轉化的具有一定規範的json格式,然後傳輸的伺服器端...

Json JSON編碼格式提交表單資料詳解

via 以json編碼格式提交表單資料是html5對web發展進化的又一大貢獻,以前我們的html表單資料是通過key value方式傳輸的伺服器端,這種形式的傳輸對資料組織缺乏管理,形式十分原始。而新出現的json格式提交表單資料方法,將表單裡的所有資料轉化的具有一定規範的json格式,然後傳輸的...

form表單資料提交遇到跨域時

1 乙個網域名稱 上的form表單將資料提交到另乙個網域名稱 上去 利用ajax進行非同步請求資料 如果是php後台接收資料,這個時候會遇到跨域的問題 在php頁面的header頭加上下面這個允許所有的網域名稱訪問,當然也可以寫指定的網域名稱 header access control allow ...