1. 程式人生 > >encodeURI來解決URL傳遞時的中文問題

encodeURI來解決URL傳遞時的中文問題

encodeURI

function verify() { //解決中文亂麻問題的方法1,頁面端發出的資料作一次encodeURI, 伺服器段使用進行轉移成UTF-8; //解決中文亂麻問題的方法2,頁面端發出的資料作兩次encodeURI, 這個做的好處在於,不管瀏覽器使用者在頁面來設定編碼,伺服器所採用的編碼來做一次URLencode轉換成UTF-8. var url = "AJAXServer?name=" + encodeURI(encodeURI($("#userName").val())); url = convertURL(url); $.get(url,null,function

(data){ $("#result").html(data); }); } 說明:1 .encodeURL函式主要是來對URI來做轉碼,它預設是採用的UTF-8的編碼. 2. UTF-8編碼的格式:一個漢字來三個位元組構成,每一個位元組會轉換成16進位制的編碼,同時新增上%號.

複製程式碼

這裡要做兩次encodeURI的原因以及說明::

複製程式碼

具體說明

其中具體的原理分析如下,假設頁面端輸入的中文是一個“中”,按照下面步驟進行解碼 1.第一次encodeURI,按照utf-8方式獲取位元組陣列變成[-28,-72-83],對位元組碼陣列進行遍歷,把每個位元組轉化成對應的16進位制數,這樣就變成了[E4,B8,AD],最後變成[%E4,%B8,%AD]

2.第二次encodeURI,把陣列最後變成[%25E4,%25B8,%25AD]然後就把處理後的資料[%25E4,%25B8,%25AD]發往伺服器端, 當應用伺服器呼叫getParameter方法,getParameter方法會去向應用伺服器請求引數 應用伺服器最初獲得的就是傳送來的[%25E4,%25B8,%25AD],應用伺服器會對這個資料進行URLdecode操作,URldecode操作和encodeURL操作是相反的操作,處理結果就是[%E4,%B8,%AD],並把這個值返回給getParameter方法 然後再在伺服器端中呼叫相應的URL轉碼方法或者是函式就可以把資料還原成最初頁面傳送過來的中文“中”了。

複製程式碼