網頁亂碼問題

2022-05-23 05:03:10 字數 2032 閱讀 4245

顯然,只有傳送端和接收端指代的是同樣的內容,我們才能得到正確的結果。那麼,對於一次搜尋請求中關鍵字的提交,我們有3種方式,簡稱發1,發2,發3:

(發1)表單post提交

(發2)表單get提交

(發3)將搜尋項直接內含在url裡,如春節 。

先來討論發1和發2情況。

在阮一峰的這篇文章中,我們看到,對於get和post,在頁面進行提交的時候,提交過去的編碼,就是提交頁面的字元編碼。所不同的是,如果採用的是get方式,對於中文,瀏覽器還會依照當前字元編碼做url編碼,那麼如果是get提交過去的,接收方還要按照約定先做一次url解碼。

這樣看,如果提交方、接收方是同一字元編碼,則不會有神碼問題。

然而事情不會是這麼簡單,單就簡體中文世界來講,就有gb2312 , gbk , gb18030 , utf-8幾種常見的字元編碼。對於gb系之間,除了使用特別罕用的考驗人品的字元之外,其他一般可以認為是一種編碼。但是gb系和utf-8之間互相提交常常會出現問題。比如我們前文提到的就是utf-8頁面向gbk頁面提交的情形。當編碼到達接收方,接收方執拗地用自己的字元編碼來解釋另一種字元編碼,於是神碼出沒。

好吧,那問題從巨集觀上有了兩種解決思路,簡稱解1,解2:

(解1) 傳送方把自己的提交的字元編碼變成接收方的字元編碼

對於gb係向utf-8提交,這個方法是可行的。js的encodeuricomponent方法,會強制把提交引數換成utf-8. 參見拔赤的這篇文章

對於utf-8向gb系提交,這個方法有些複雜。網上有一些偏方,各有缺陷,所列如下:

解決方案

缺陷

設定form的accept-charset,置為gb系

ie系列不支援,甚至ie9

針對ie設定form的document.charset

頁面不能多次提交,從第二次開始亂碼

載入乙個對應列表,提交前使用hash轉碼

列表體積可能會是乙個問題,不過對於內部系統,或者要求速度不苛刻的站點可以使用。

針對ie,使用vbs,進行轉碼

ieonly,且不是每個字元都能無誤地轉碼

引入後端proxy先提交到傳送端的域,通過後端程式轉碼,之後提交給接收端

小題大做,影響效率。

好吧,對於ie,我們又一次給跪了。

綜上,對於utf-8向gb系提交,在傳送端無解。

(解2) 傳送方告訴接收方編碼,接收方據此把提交過來的字元編碼轉化為自己需要的編碼,然後完成搜尋

這也是現在各大搜尋引擎的標準做法。他們提供乙個ie引數(input encoding), 表示輸入的字元編碼。

無論是utf-8向gb系提交還是gb係向utf-8提交,甚至之後接收方需要轉變字元編碼,這個做法都屬於屢試不爽型。這也是目前處理這類問題的首選做法。

綜上,我們對於發1和發2兩種情況,選擇解二作為解決方案

現在再來說說發3的情況

這種url很可能是接收端提供者,為了獲取較易讀的url,在伺服器端做的url路由,但實際上 發3 所列的並不是標準的url。上面提到的url編碼會要求把中文字元進行url編碼。因為標準中沒有提到如何編碼,所以瀏覽器在此,會有不同的處理方案。事實上,ie8及以上的瀏覽器,firefox,chrome等瀏覽器會把中文變成utf-8編碼進行處理。但是ie6/7 ,會使用系統預設編碼作為傳送方式。因此這樣直接採用中文是不安全的, 接收端也會做大量的工作去普適各種編碼。不過好在,我們有乙個encodeuri利器,這樣我們可以在傳送時候將中文做一次編碼強制轉為utf-8 , 接收端統一按utf-8處理就可以了。

現在我們來總結下這篇文章的結論

1,對於get/post方式,傳送方提供乙個ie引數,用來表示提供的字元編碼,接收方據此進行轉碼後,完成搜尋和展示。

2,對於url直接帶有中文(非get引數)時,傳送端在傳送前用encodeuricomponent將查詢串進行編碼,接收方按utf-8接收。

mysql亂碼 解決網頁中亂碼的問題

1.將 編碼設為 utf 8,這樣可以相容世界上所有字元 2.如果 已經運作了好久,已有很多舊資料,不能再更改簡體中文的設定,那麼建議將頁面的編碼設為 gbk,gbk與gb2312的區別就在於 gbk能比gb2312顯示更多的字元,要顯示簡體碼的繁體字,就只能用gbk 4.在編寫connection...

linux下網頁亂碼的問題

開始以為是字符集有問題 經過網上排查確定為 linux 沒有安裝中文字符集 於是開始安裝中文字符集 1 簡單的yum命令 首先為了順利完成今天的任務我們要介紹幾個最簡單的yum命令 yum install 軟體的名稱 安裝軟體 yum remove 軟體的名稱 刪除軟體 yum list 軟體的名稱...

ajax中文亂碼最終解決,網頁亂碼問題心得

用過ajax的人都會碰到中文亂碼,網上基然有很多方法,但看完之後,很多人仍然解決不了亂碼問題,為什麼有的網頁始終都會返回亂碼,不管怎麼設定呢?本人經研究終於解決,其實是個很原理的問題,但因為現在不知道底層原理而做高階應用是主流人群,所以會有很多人不知道,包括我自己.說到網頁的編碼,要分兩分部分,一部...