婷婷五月不卡综合aⅴ_2018视频日韩_亚洲一线免费观看_亚洲精品在线永久

URL(urlencode)編碼解碼

  • 4篇文章
  • 26004位觀眾

urlencode()函數(shù)原理就是首先把中文字符轉(zhuǎn)換為十六進(jìn)制,然后在每個(gè)字符前面加一個(gè)標(biāo)識(shí)符%。 urldecode()函數(shù)與urlencode()函數(shù)原理相反,用于解碼已編碼的 URL 字符串,其原理就是把十六進(jìn)制字符串轉(zhuǎn)換為中文字符

在線咨詢

URL(urlencode)編碼解碼常用的兩種方式

URL(urlencode)編碼解碼通過(guò)以下兩種方式都可以編碼和解碼

1、用JS對(duì)URL進(jìn)行編碼和解碼

JavaScript中有三個(gè)可以對(duì)字符串編碼的函數(shù),分別是:
escape,encodeURI,encodeURIComponent,相應(yīng)3個(gè)解碼函數(shù):unescape,decodeURI,decodeURIComponent。

escape()
函數(shù)可對(duì)字符串進(jìn)行編碼

語(yǔ)法
escape(string)

encodeURI()
函數(shù)可把字符串作為
URI
進(jìn)行編碼。
語(yǔ)法
encodeURI(URIstring)
該方法的目的是對(duì)
URI
進(jìn)行完整的編碼,因此對(duì)以下在
URI
中具有特殊含義的
ASCII
標(biāo)點(diǎn)符號(hào),encodeURI()
函數(shù)是不會(huì)進(jìn)行轉(zhuǎn)義的:;/?:@&=+$,#

encodeURIComponent()
函數(shù)
encodeURIComponent()
函數(shù)可把字符串作為
URI
組件進(jìn)行編碼。
escape()除了
ASCII
字母、數(shù)字和特定的符號(hào)外,對(duì)傳進(jìn)來(lái)的字符串全部進(jìn)行轉(zhuǎn)義編碼,因此如果想對(duì)URL編碼,最好不要使用此方法。而encodeURI()
用于編碼整個(gè)URI,因?yàn)閁RI中的合法字符都不會(huì)被編碼轉(zhuǎn)換。encodeURIComponent方法在編碼單個(gè)URIComponent(指請(qǐng)求參數(shù))應(yīng)當(dāng)是最常用的,它可以講參數(shù)中的中文、特殊字符進(jìn)行轉(zhuǎn)義,而不會(huì)影響整個(gè)URL。

2、用asp.net對(duì)URL進(jìn)行編碼和解碼


用System.Web.HttpUtility.UrlEncode編碼:
string
tmp1
=
System.Web.HttpUtility.UrlEncode(".net技術(shù)",
System.Text.Encoding.GetEncoding("GB2312"));
string
tmp2
=
System.Web.HttpUtility.UrlEncode(".net技術(shù)",
System.Text.Encoding.UTF8);

用System.Web.HttpUtility.UrlDecode
或者
Server.UrlEncode
相應(yīng)的進(jìn)行解碼

URL的編碼或解碼方法有哪些?

紀(jì)靜楓

紀(jì)靜楓

+關(guān)注

URL的合法字符

URL的合法字符表示再瀏覽器的地址欄中不會(huì)被轉(zhuǎn)義的字符,有兩種:

  1. URL元字符:分號(hào)(;),逗號(hào)(’,’),斜杠(/),問(wèn)號(hào)(?),冒號(hào)(:),at(@),&,等號(hào)(=),加號(hào)(+),美元符號(hào)($),井號(hào)(#)
  2. 語(yǔ)義字符:a-z,A-Z,0-9,連詞號(hào)(-),下劃線(_),點(diǎn)(.),感嘆號(hào)(!),波浪線(~),星號(hào)(*),單引號(hào)(),圓括號(hào)(()`)

當(dāng)輸入的字符不符合以上的字符時(shí),瀏覽器就會(huì)把該字符轉(zhuǎn)義,規(guī)則:根據(jù)操作系統(tǒng)的默認(rèn)編碼,將每個(gè)字節(jié)轉(zhuǎn)為百分號(hào)(%)加上兩個(gè)大寫(xiě)的十六進(jìn)制字母。
比如:當(dāng)再瀏覽器地址欄中輸入www.baidu.com/q=你好時(shí),會(huì)被轉(zhuǎn)義成例如www.baidu.com/q=%E6%98%A5%E8%8A%82類似的字符串,瀏覽器才會(huì)讀取。

JavaScript的四個(gè)URL編碼/解碼方法:

encodeURI

將元字符和語(yǔ)義字符之外的字符都進(jìn)行轉(zhuǎn)義,一般用于知道該URL只用于完整的URL時(shí)使用

encodeURIComponent

將除了語(yǔ)義字符之外的字符進(jìn)行轉(zhuǎn)義,包括元字符,因此,它的參數(shù)通常是URL的路徑或參數(shù)值,而不是整個(gè)URL。
比如說(shuō),要在谷歌中搜索www.baidu.com/q=5&name時(shí),若使用encodeURI,&字符并不會(huì)被轉(zhuǎn)義,從而改變其真正的URL。

decodeURI

還原轉(zhuǎn)義后的URL,是encodeURI方法的逆運(yùn)算。

decodeURIComponent

還原轉(zhuǎn)義后的URL片段。是encodeURIComponent方法的逆運(yùn)算。

URL(urlencode)編碼解碼詳細(xì)分析

大膽爆米花

大膽爆米花

+關(guān)注

一、問(wèn)題的由來(lái)

URL就是網(wǎng)址,只要上網(wǎng),就一定會(huì)用到。


一般來(lái)說(shuō),URL只能使用英文字母、阿拉伯?dāng)?shù)字和某些標(biāo)點(diǎn)符號(hào),不能使用其他文字和符號(hào)。比如,世界上有英文字母的網(wǎng)址"http://www.abc.com",但是沒(méi)有希臘字母的網(wǎng)址"http://www.aβγ.com"(讀作阿爾法-貝塔-伽瑪.com)。這是因?yàn)榫W(wǎng)絡(luò)標(biāo)準(zhǔn)RFC 1738做了硬性規(guī)定:

"...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."

"只有字母和數(shù)字[0-9a-zA-Z]、一些特殊符號(hào)"$-_.+!*'(),"[不包括雙引號(hào)]、以及某些保留字,才可以不經(jīng)過(guò)編碼直接用于URL。"

這意味著,如果URL中有漢字,就必須編碼后使用。但是麻煩的是,RFC 1738沒(méi)有規(guī)定具體的編碼方法,而是交給應(yīng)用程序(瀏覽器)自己決定。這導(dǎo)致"URL編碼"成為了一個(gè)混亂的領(lǐng)域。

下面就讓我們看看,"URL編碼"到底有多混亂。我會(huì)依次分析四種不同的情況,在每一種情況中,瀏覽器的URL編碼方法都不一樣。把它們的差異解釋清楚之后,我再說(shuō)如何用Javascript找到一個(gè)統(tǒng)一的編碼方法。

二、情況1:網(wǎng)址路徑中包含漢字

打開(kāi)IE(我用的是8.0版),輸入網(wǎng)址"http://zh.wikipedia.org/wiki/春節(jié)"。注意,"春節(jié)"這兩個(gè)字此時(shí)是網(wǎng)址路徑的一部分。

bg2010021102.jpg

查看HTTP請(qǐng)求的頭信息,會(huì)發(fā)現(xiàn)IE實(shí)際查詢的網(wǎng)址是"http://zh.wikipedia.org/wiki/%E6%98%A5%E8%8A%82"。也就是說(shuō),IE自動(dòng)將"春節(jié)"編碼成了"%E6%98%A5%E8%8A%82"。

bg2010021103.png


我們知道,"春"和"節(jié)"的utf-8編碼分別是"E6 98 A5"和"E8 8A 82",因此,"%E6%98%A5%E8%8A%82"就是按照順序,在每個(gè)字節(jié)前加上%而得到的。(具體的轉(zhuǎn)碼方法,請(qǐng)參考我寫(xiě)的《字符編碼筆記》。)

在Firefox中測(cè)試,也得到了同樣的結(jié)果。所以,結(jié)論1就是,網(wǎng)址路徑的編碼,用的是utf-8編碼。

三、情況2:查詢字符串包含漢字

在IE中輸入網(wǎng)址"http://www.baidu.com/s?wd=春節(jié)"。注意,"春節(jié)"這兩個(gè)字此時(shí)屬于查詢字符串,不屬于網(wǎng)址路徑,不要與情況1混淆。

bg2010021104.jpg


查看HTTP請(qǐng)求的頭信息,會(huì)發(fā)現(xiàn)IE將"春節(jié)"轉(zhuǎn)化成了一個(gè)亂碼。

bg2010021105.png

切換到十六進(jìn)制方式,才能清楚地看到,"春節(jié)"被轉(zhuǎn)成了"B4 BA BD DA"。

bg2010021106.png


我們知道,"春"和"節(jié)"的GB2312編碼(我的操作系統(tǒng)"Windows XP"中文版的默認(rèn)編碼)分別是"B4 BA"和"BD DA"。因此,IE實(shí)際上就是將查詢字符串,以GB2312編碼的格式發(fā)送出去。

Firefox的處理方法,略有不同。它發(fā)送的HTTP Head是"wd=%B4%BA%BD%DA"。也就是說(shuō),同樣采用GB2312編碼,但是在每個(gè)字節(jié)前加上了%。

所以,結(jié)論2就是,查詢字符串的編碼,用的是操作系統(tǒng)的默認(rèn)編碼。

四、情況3:Get方法生成的URL包含漢字

前面說(shuō)的是直接輸入網(wǎng)址的情況,但是更常見(jiàn)的情況是,在已打開(kāi)的網(wǎng)頁(yè)上,直接用Get或Post方法發(fā)出HTTP請(qǐng)求。

根據(jù)臺(tái)灣中興大學(xué)呂瑞麟老師的試驗(yàn),這時(shí)的編碼方法由網(wǎng)頁(yè)的編碼決定,也就是由HTML源碼中字符集的設(shè)定決定。

  <meta http-equiv="Content-Type" content="text/html;charset=xxxx">

如果上面這一行最后的charset是UTF-8,則URL就以UTF-8編碼;如果是GB2312,URL就以GB2312編碼。

舉例來(lái)說(shuō),百度是GB2312編碼,Google是UTF-8編碼。因此,從它們的搜索框中搜索同一個(gè)詞"春節(jié)",生成的查詢字符串是不一樣的。

百度生成的是%B4%BA%BD%DA,這是GB2312編碼。

所以,結(jié)論3就是,GET和POST方法的編碼,用的是網(wǎng)頁(yè)的編碼。

五、情況4:Ajax調(diào)用的URL包含漢字

前面三種情況都是由瀏覽器發(fā)出HTTP請(qǐng)求,最后一種情況則是由Javascript生成HTTP請(qǐng)求,也就是Ajax調(diào)用。還是根據(jù)呂瑞麟老師的文章,在這種情況下,IE和Firefox的處理方式完全不一樣。

舉例來(lái)說(shuō),有這樣兩行代碼:

  url = url + "?q=" +document.myform.elements[0].value; // 假定用戶在表單中提交的值是"春節(jié)"這兩個(gè)字

  http_request.open('GET', url, true);

那么,無(wú)論網(wǎng)頁(yè)使用什么字符集,IE傳送給服務(wù)器的總是"q=%B4%BA%BD%DA",而Firefox傳送給服務(wù)器的總是"q=%E6%98%A5%E8%8A%82"。也就是說(shuō),在Ajax調(diào)用中,IE總是采用GB2312編碼(操作系統(tǒng)的默認(rèn)編碼),而Firefox總是采用utf-8編碼。這就是我們的結(jié)論4。

六、Javascript函數(shù):escape()

好了,到此為止,四種情況都說(shuō)完了。

假定前面你都看懂了,那么此時(shí)你應(yīng)該會(huì)感到很頭痛。因?yàn)?,?shí)在太混亂了。不同的操作系統(tǒng)、不同的瀏覽器、不同的網(wǎng)頁(yè)字符集,將導(dǎo)致完全不同的編碼結(jié)果。如果程序員要把每一種結(jié)果都考慮進(jìn)去,是不是太恐怖了?有沒(méi)有辦法,能夠保證客戶端只用一種編碼方法向服務(wù)器發(fā)出請(qǐng)求?

回答是有的,就是使用Javascript先對(duì)URL編碼,然后再向服務(wù)器提交,不要給瀏覽器插手的機(jī)會(huì)。因?yàn)镴avascript的輸出總是一致的,所以就保證了服務(wù)器得到的數(shù)據(jù)是格式統(tǒng)一的。

Javascript語(yǔ)言用于編碼的函數(shù),一共有三個(gè),最古老的一個(gè)就是escape()。雖然這個(gè)函數(shù)現(xiàn)在已經(jīng)不提倡使用了,但是由于歷史原因,很多地方還在使用它,所以有必要先從它講起。

實(shí)際上,escape()不能直接用于URL編碼,它的真正作用是返回一個(gè)字符的Unicode編碼值。比如"春節(jié)"的返回結(jié)果是%u6625%u8282,也就是說(shuō)在Unicode字符集中,"春"是第6625個(gè)(十六進(jìn)制)字符,"節(jié)"是第8282個(gè)(十六進(jìn)制)字符。

它的具體規(guī)則是,除了ASCII字母、數(shù)字、標(biāo)點(diǎn)符號(hào)"@ * _ + - . /"以外,對(duì)其他所有字符進(jìn)行編碼。在\u0000到\u00ff之間的符號(hào)被轉(zhuǎn)成%xx的形式,其余符號(hào)被轉(zhuǎn)成%uxxxx的形式。對(duì)應(yīng)的解碼函數(shù)是unescape()。

所以,"Hello World"的escape()編碼就是"Hello%20World"。因?yàn)榭崭竦腢nicode值是20(十六進(jìn)制)。

還有兩個(gè)地方需要注意。

首先,無(wú)論網(wǎng)頁(yè)的原始編碼是什么,一旦被Javascript編碼,就都變?yōu)閡nicode字符。也就是說(shuō),Javascipt函數(shù)的輸入和輸出,默認(rèn)都是Unicode字符。這一點(diǎn)對(duì)下面兩個(gè)函數(shù)也適用。

其次,escape()不對(duì)"+"編碼。但是我們知道,網(wǎng)頁(yè)在提交表單的時(shí)候,如果有空格,則會(huì)被轉(zhuǎn)化為+字符。服務(wù)器處理數(shù)據(jù)的時(shí)候,會(huì)把+號(hào)處理成空格。所以,使用的時(shí)候要小心。

七、Javascript函數(shù):encodeURI()

encodeURI()是Javascript中真正用來(lái)對(duì)URL編碼的函數(shù)。

它著眼于對(duì)整個(gè)URL進(jìn)行編碼,因此除了常見(jiàn)的符號(hào)以外,對(duì)其他一些在網(wǎng)址中有特殊含義的符號(hào)"; / ? : @ & = + $ , #",也不進(jìn)行編碼。編碼后,它輸出符號(hào)的utf-8形式,并且在每個(gè)字節(jié)前加上%。

八、Javascript函數(shù):encodeURIComponent()

最后一個(gè)Javascript編碼函數(shù)是encodeURIComponent()。與encodeURI()的區(qū)別是,它用于對(duì)URL的組成部分進(jìn)行個(gè)別編碼,而不用于對(duì)整個(gè)URL進(jìn)行編碼。

因此,"; / ? : @ & = + $ , #",這些在encodeURI()中不被編碼的符號(hào),在encodeURIComponent()中統(tǒng)統(tǒng)會(huì)被編碼。至于具體的編碼方法,兩者是一樣。

bg2010021115.png


它對(duì)應(yīng)的解碼函數(shù)是decodeURIComponent()。




URL 如何編碼解碼?為什么要編碼?

苗條啞鈴

苗條啞鈴

+關(guān)注

為什么要編碼?

URL 只能使用 ASCII 字符集來(lái)通過(guò)因特網(wǎng)進(jìn)行發(fā)送。也就是說(shuō)URL只能使用英文字母、阿拉伯?dāng)?shù)字和某些標(biāo)點(diǎn)符號(hào),不能使用其他文字和符號(hào)。
這意味著如果URL存在漢字,就必須編碼后使用。

微信截圖_20210927150037.jpg

如上圖所示,在瀏覽器中的 URL 所展現(xiàn)的樣式包含有中文字符,但將這行 URL 復(fù)制粘貼時(shí)會(huì)發(fā)現(xiàn),實(shí)際上的內(nèi)容和你所看到的是不一樣的。所以說(shuō) URL 編碼只是針對(duì)非英文字母、阿拉伯?dāng)?shù)字和某些標(biāo)點(diǎn)符號(hào)起作用的。

那么 URL 是如何編碼的呢??

URL 編碼的原則就是使用安全的字符(沒(méi)有特殊用途或者特殊意義的可打印字符)去表示那些不安全的字符。

首先需要把該字符的 ASCII 的值表示為兩個(gè)16進(jìn)制的數(shù)字,然后在其前面放置轉(zhuǎn)義字符("%"),置入 URL 中的相應(yīng)位置。(對(duì)于非 ASCII 字符, 需要轉(zhuǎn)換為 UTF-8 字節(jié)序, 然后每個(gè)字節(jié)按照上述方式表示.)

例如說(shuō)我們有這樣一條 URL :www.tccdealerjobs.com/你好?a=1&b=2,我們?nèi)绾慰梢园阉戏ǖ脑谝蛱鼐W(wǎng)中傳播呢??
使用encodeURIComponent(str)這個(gè)方法來(lái)將 utf-8 的字符編碼為合法的 URL 。
上面的那條網(wǎng)址合法的傳輸形式為window.encodeURIComponent('www.hahaha.com/你好?a=1&b=2')。

1.jpg

想要解碼的時(shí)候只需要使用decodeURIComponent(str)這個(gè)方法就可以解碼你所得到的URL 。

2.jpg

JavaScript提供四個(gè)URL的編碼/解碼方法。
除了以上兩種,還有decodeURI()解碼和encodeURI()編碼,區(qū)別是:

encodeURI方法不會(huì)對(duì)下列字符編碼

  1. ASCII字母
  2. 數(shù)字
  3. ~!@#$&*()=:/,;?+'

encodeURIComponent方法不會(huì)對(duì)下列字符編碼

  1. ASCII字母
  2. 數(shù)字
  3. ~!*()'

所以encodeURIComponent比encodeURI編碼的范圍更大。

實(shí)際例子來(lái)說(shuō),encodeURIComponent會(huì)把 http:// 編碼成 http%3A%2F%2F 而encodeURI卻不會(huì)。

  • 1頁(yè)4條數(shù)據(jù)

服務(wù)項(xiàng)目

運(yùn)營(yíng)推廣

聯(lián)系我們

深圳豐涵科技有限公司

地址:深圳市龍崗區(qū)平湖街道國(guó)際電商中心509

聯(lián)系人:于經(jīng)理

聯(lián)系電話:18129931345

售前咨詢:

18129931345