導航:首頁 > IDC知識 > 伺服器url編碼

伺服器url編碼

發布時間:2021-01-12 18:56:23

1、怎樣用jquery編碼和解碼url?

在jQuery中,抄我們可以使用以下襲方法實現URL的編碼和解碼:

encodeURIComponent(url) and decodeURIComponent(url)

2、URL編碼,該怎麼處理

import java.net.URLDecoder;
import java.net.URLEncoder;

try {
String urlEncode = URLEncoder.encode("百度一下,你就知回道答", "UTF-8");
System.out.println(urlEncode);
String urlDecode = URLDecoder.decode(urlEncode, "UTF-8");
System.out.println(urlDecode);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

3、如何對 HTTP 請求中的字元編碼進行正確的處理

1. 什麼是URL編碼。
URL編碼是一種瀏覽器用來打包表單輸入的格式,瀏覽器從表單中獲取所有的name和其對應的value,將他們以name/value編碼方式作為URL的一部分或者分離的發送到伺服器上。
2. URL編碼規則。
每對name/value由&分開,每對來自表單的name/value用=分開。如果用戶沒有輸入值的那個name依舊會出現不過就是沒有值。
URL編碼是在字元ASCII碼的十六進制數的前面加上%。例如\(她的十六進制數表示為5c)的URL編碼就是%5c。
3. 簡單介紹亂碼和http請求
其實做web開發亂碼問題是經常出現的,有了上面編碼的基礎之後下面來看看亂碼。
1) 亂碼問題是web開發過程中經常遇到的問題,主要原因就是URL中使用了非ASCII碼造成伺服器後台程序解析出現亂碼的問題。
2) URL中最容易出現中文的地方就是在QueryString的參數值還有Servletpath中。
3) 簡單用一個圖來說明一下http請求的流程:
第一步:瀏覽器把URL經過編碼送給伺服器;
第二步:伺服器把這些請求解碼處理完畢之後將顯示的內容進行編碼發送給客戶端瀏覽器;
第三步:瀏覽器按照指定的編碼顯示網頁
4) 詳細剖析GET提交如何編碼以及伺服器如何解碼以及亂碼解決方案
對於GET方式,我們知道它的提交是將請求數據附加到URL後面作為參數,這樣依賴亂碼就會很容易出現,因為數據name和value很有可能就是傳遞的為非ASCII碼。
當URL拼接後,瀏覽器對其進行encode,然後發送到伺服器。具體規則見URL編碼規則。
這里詳細說一下encode的過程中容易出現的問題,在這個過程中我們要明白需要URL encode的字元一般都是非ASCII碼字元,所以我們就能知道出現亂碼主要是URL中附加了中文或特殊字元做成的,另一個要知道URL encode到底是以什麼樣的編碼方式對字元進行編碼的,其實這個編碼方式是由瀏覽器決定的,不同的瀏覽器和同一瀏覽器的不同設置影響了URL的編碼,所以為了避免我們不需要的編碼,我們可以通過java代碼或javaspcript代碼統一進行控制。
完成了URL encode之後URL就成了ASCII范圍內的字元了,然後就以iso-8859-1的編碼方式轉換為二進制隨著請求頭一起發送出去。
到了伺服器之後,首先伺服器會先用iso-8859-1進行解碼,伺服器獲取的數據都是ASCII范圍內的請求頭字元,其中請求URL裡面帶有參數數據,如果是中衛或特殊字元,那麼encode後的%XY(編碼規則中的十六進制數)通過request.setCharacterEncoding()是不管用的。這時候我們就能發現出現亂碼的根本原因就是客戶端一般是通過用UTF-8或GBK等對數據進行encode的,到了伺服器卻用iso-8859-1方式decoder顯然不行。
這里的解決方式有兩種,
一種:是通過String類的getBytes方法進行編碼轉換,具體java代碼是:
new String(request.getParameter(「name」).getBytes(「iso-8859-1」),「客戶端編碼方式」)
第二種:在伺服器xml代碼中改配置信息:
<Connector port="8080"protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000"
redirectPort="8443"URIEncoding="客戶端編碼"/>

5) 詳細剖析POST提交如何編碼以及伺服器如何解碼以及亂碼解決方案
對於POST方式,表單中的參數值對是通過request包發送給伺服器,此時瀏覽器會根據網頁的ContentType("text/html; charset=GBK")中指定的編碼進行對表單中的數據進行編碼,然後發給伺服器。
在伺服器端的程序中我們可以通過
Request.setCharacterEncoding()設置編碼,然後通過
request.getParameter獲得正確的數據。
這里出現亂碼可以通過Request.setCharacterEncoding()直接解決。

4、URL用什麼編碼傳輸

URL編碼既不是utf-8也不是gbk等我們常用的字元編碼。

而是RFC1738編碼(除將空格編碼為加號「+」不符合外)。

類似於http://www.baidu.com/s?wd=%B9%FE%B9%FE&word=%B9%FE%B9%FE,其實就是經過RFC1738編碼的URL地址。

RFC1738字元集中,將URL中除了 - _ . 之外的所有非字母數字字元都將被替換成百分號(%)後跟兩位十六進制數。除空格編碼為加號(+)外。

我們訪問的網站都會對使用RFC1738字元集的URL做出正確的解析。因為這是國際組織早就規定好了的。

DNS伺服器一般不會涉及到這塊,因為DNS是域名解析器,顧名思義,他只是解釋http://www.baidu.com這一部分,而涉及到RFC1738字元集的大部分是後面的參數部分。

當我們在地址欄輸入字元串的時候,不論你用的是什麼字元集最後都會轉化為使用RFC1738字元集編碼的URL地址。

我們可以把RFC1738字元集設想成類似於ASCII的字元集,是通用的,任何字元集都支持的。

我看到過國際組織關於這方面的文檔,加上了一些個人的理解,不對之處大家討論。

5、為什麼伺服器可以解析二次url編碼後的數據

地址欄中出現漢字的情況有兩種,一種是漢字出現在URL的路徑部分,一種是漢字出現在URL的傳參的部分,第二種情況的時候必須採用編碼後傳參,接受時解碼的方式完成傳參。js中編碼有escape(),encodeURI(),encodeURIComponent()三個常用的方法,escape()常常用在提交頁面和處理頁面的編碼格式相同的情況下(比如它們都是GB2312),encodeURI()和encodeURIComponent()的用法基本相同,區別在於encodeURIComponent()也對"?"等特殊字元進行編碼。
一開始遇到中文參數的時候,使用encodeURI()進行了一遍編碼,傳過去後,發現解碼出現問題,於是想到可能是編碼方法使用錯誤,於是使用escape()方法,這時發現解碼時拋出isHexDigit異常。藉助網路搜索isHexDigit異常,
發現原來,是escape()方法造成了異常,同時了解了瀏覽器傳遞地址的一些原理,在瀏覽器地址欄里,瀏覽器認為%是個轉義字元,瀏覽器會把%與%之間的編碼,兩位兩位取出後進行解碼,然後再傳遞給處理頁面,
然後由處理頁面進行再次解碼。由此我想到一直使用encodeURI方法是正確的,只是需要使用兩次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文編碼成%xy的格式,
第二次是對%xy中的%進行編碼,%編碼成%25。整個傳參過程大體應該是:提交頁面使用encodeURI(encodeURI("中文"))編碼,把最後的編碼結果%25xy傳遞給處理頁面的過程中,瀏覽器獲取URL地址
(注意openModelDialog方法,瀏覽器獲取不到參數編碼)後解碼成%xy,然後把%xy傳遞給處理頁面,處理頁面使用URLDecoder.decode(request.getParameter("參數名"),"UTF-8");完成解碼。
總結:
1、漢字出現在URL路徑部分的時候不需要編碼解碼;
2、使用encodeURI進行2次編碼;
3、在openModelDialog()打開的模式窗體里沒辦法用request.getParameter正確獲取參數;

客戶端和伺服器在傳遞數據時可以用過濾器filter解決字元編碼問題,但filter只能解決post方式提交的數據。對於get方式,可以使用兩次encodeURI(encodeURI(「中文」))並在伺服器中使用URLDecoder.decode(「中文」, "UTF-8");
今天用Ajax校驗數據時也遇到這個問題,盡管頁面、類和web容器都統一了字元編碼,提交的數據依然是亂碼,所以就採用了2次encodeURI()編碼方式,亂碼問題就解決了。
頁面
var name=document.myForm.username.value;
var url="Ajax.do?method=check&name="+encodeURI(encodeURI(name));
xmlHttp.open("GET",url,true);
action中
String name = request.getParameter("name");
name = URLDecoder.decode(name, "UTF-8");
servlet返回數據時,將字元編碼設置為utf-8就可以了,因為Ajax只支持utf-8
response.setContentType("text/xml;charset=utf-8");
PrintWriter out = response.getWriter();
out.print(result);
-----(以上答案 我在一個叫 燃燒這青春的空間看來得 ,希望幫的到你)

6、URL中,什麼字元需要編碼

關於URL編碼,RFC1738做了如下的規定:

「Only alphanumerics [0-9a-zA-Z], the special characters 「$-_.+!*』(),」
[not including the quotes - ed], and reserved characters used for their
reserved purposes may be used unencoded within a URL.」

RFC繼而說明了保留字、特殊符號回、不安全字元的含義——答也就是說,下面三類字元可以不經過編碼,直接出現在URL上:

[0-9a-zA-Z]

特殊字元:$-_.+!*』(),

保留字元:&/:;=?@

為了讓我們思路更清晰,我們再總結一下,哪些字元必須要編碼:

ASCII表中沒有對應可顯示字元的,例如漢字

不安全字元,包括:#」%<>[]{}|^`~

不當做保留字元來使用的保留字元,即&/:;=?@

7、怎麼對url連接進行URL 編碼

在js中可以使用escape(), encodeURL(), encodeURIComponent(),三種方法都有一些不會被編碼的符號:

escape():@ * / +

encodeURL():!版 @ # $& * ( ) = : / ; ? + '

encodeURIComponent():! * ( ) '

在java端可以使用URLDecoder.decode(「中文」權, "UTF-8");來進行解碼

但是由於使用request.getParameter()來獲取參數時已經對編碼進行了一次解碼,所以一般情況下只要在js中使用

encodeURIComponent("中文");

在java端直接使用request.getParameter()來獲取即可返回中文。

如果你想在java端使用URLDecoder.decode(「中文」, "UTF-8");來解碼也可以在js中進行二次編碼,即:

encodeURIComponent(encodeURIComponent("中文"));

如果不進行二次編碼的話,在java端通過decode方法取的會是亂碼。

8、誰知道url編碼的作用啊?

「另外中文字經編碼後全是怪符號,有利於保密。 」
這個不是原因吧--!

是因為編碼後在全世界范圍內才可以使用
某些操作系統是沒有不支持中文字元的

9、URL編碼的使用舉例

也就是容易出現中文字元的部分:
(1)Query String中的參數值
(2)servlet path (1)瀏覽器:我們的客戶端(瀏覽器)本身並沒有遵循URI編碼的規范。
(2)Servlet伺服器:Servlet伺服器的沒有正確配置。
(3)開發人員並不了解Servlet的規范和API的含義。 (1)HttpServletRequest.setCharacterEncoding()方法 僅僅只適用於設置post提交的requestboda的編碼而不是設置get方法提交的queryString的編碼。該方法告訴應用伺服器應該採用什麼編碼解析post傳過來的內容。
(2) HttpServletRequest.getPathInfo()返回的結果是由Servlet伺服器解碼(decode)過的。
(3) HttpServletRequest.getRequestURI()返回的字元串沒有被Servlet伺服器decoded過。
(4) POST提交的數據是作為request body的一部分。
(5) 網頁的Http頭中ContentType(text/html; charset=GBK)的作用:
(a) 告訴瀏覽器網頁中數據是什麼編碼;
(b) 表單提交時,通常瀏覽器會根據ContentType指定的charset對表單中的數據編碼,然後發送給伺服器的。
注意:這里所說的ContentType是指http頭的ContentType,而不是在網頁中mete中的ContentType。

10、URL編碼的編碼規則

URL編碼遵循下列規則: 每對name/value由&;符分開;每對來自表單的name/value由=符分開。專如果用戶沒有輸入屬值給這個name,那麼這個name還是出現,只是無值。任何特殊的字元(就是那些不是簡單的七位ASCII,如漢字)將以百分符%用十六進制編碼,當然也包括象 =,&;,和 % 這些特殊的字元。其實url編碼就是一個字元ascii碼的十六進制。不過稍微有些變動,需要在前面加上「%」。比如「」,它的ascii碼是92,92的十六進制是5c,所以「」的url編碼就是%5c。那麼漢字的url編碼呢?很簡單,看例子:「胡」的ascii碼是-17670,十六進制是BAFA,url編碼是「%BA%FA」。

與伺服器url編碼相關的知識