1. 程式人生 > >JS中encodeURIComponent(URL)編碼與decodeURIComponent(URL)解碼詳解

JS中encodeURIComponent(URL)編碼與decodeURIComponent(URL)解碼詳解

(1)   encodeURIComponent(url) 函式

定義和用法 

      encodeURIComponent() 函式可把字串作為 URI 元件進行編碼。

語法 
      encodeURIComponent(URIstring)

引數 描述 

      URIstring 必需。一個字串,含有 URI 元件或其他要編碼的文字。

返回值 

      URIstring 的副本,其中的某些字元將被十六進位制的轉義序列進行替換。

說明 

      該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。

      其他字元(比如 :;/?:@&=+$,# 這些用於分隔 URI 元件的標點符號),都是由一個或多個十六進位制的轉義序

列替換的。

(1)   decodeURIComponent(url) 函式

定義和用法 

      decodeURIComponent() 函式可把字串作為 URI 元件進行解碼

語法 

    decodeURIComponent(URIstring)

引數 描述 

     URIstring 必需。一個字串,含有 URI 元件或其他要解碼的文字。

返回值 

      URIstring 的副本,其中的某些字元被十六進位制的轉義序列轉換成對應的ACSII字元。

      今天在使用js的jQuery的post向後臺servlet傳遞拼接的字串資料時,一些特殊的字元例如:“+、@、#、

$、%、&、?、/”等無法傳遞到後臺輸出。

舉個例子:

       var str1="[email protected]$dd";

       var  data="data1"="+str1+"+"&"+"data2"+str2;

         如果不進行編碼,則通過js的jQuery的post或者使用window.self.location傳遞資料到後臺,都會造成+、

@、$字元無法正常輸出。

正確寫法:

        var str1=encodeURIComponent(

"[email protected]$dd");

        var  data="data1"="+str1+"+"&"+"data2"+str2;

       對於使用window.self.location傳遞資料到後臺時,有一個特殊情況,就是java中的解碼方式:

JavaScript用encodeURIComponent編碼後無法再到後臺解碼的問題。

目前寫法:

      window.self.location="index.jsp?data="+encodeURIComponent(url);

java處理的程式碼為:

      searchtext=java.net.URLDecoder.decode(searchtext,"UTF-8");

          咋一看覺的沒問題,一編一解的,應該可以了。但還是出現了亂碼。

原因

       原來在對後臺java程式裡的data賦值的時候,本身已經使用了一次解碼,不過解碼的結果依然不對。所以我們

可以在頁面上進行兩次編碼操作,這樣後臺自動的那次就可以抵消掉一次,然後在使用

data=java.net.URLDecoder.decode(data,"UTF-8");進行一次解碼就好了。


正確的程式碼:

JavaScript:

         window.self.location="index.jsp?data="+encodeURIComponent(encodeURIComponent(url));
java:

        searchtext=java.net.URLDecoder.decode(data,"UTF-8");

        另外還有一種方法是JavaScript進行一次編碼,後臺java處理時換種想法就好了:

java程式碼:

         String s = new String(request.getParameter("data").getBytes("ISO8859-1"), "UTF-8");


相關推薦

JSencodeURIComponentURL編碼decodeURIComponentURL解碼

(1)   encodeURIComponent(url) 函式 定義和用法        encodeURIComponent() 函式可把字串作為 URI 元件進行編碼。 語法     

關於JS事件捕獲,事件冒泡事件代理事件委託,及e.targete.currentcurrentTarget的區別

事件捕獲:        表示事件的觸發順序,當繫結事件方法的第三個引數值設定為true時,事件觸發的順序為捕獲。        當一個元素的事件被觸發的時候(如onclick事件),該事件會從document開

簡訊的的 UCS2的編碼解碼方法java

最近,做一個關於SMS的程式,需要對中文部分進行UCS編碼,這裡用了兩個函式,可以將簡訊中的UCS2字串在UCS2和GBK之間裝換。記錄以下程式碼: /** * UCS2解碼 * * @param src *

JS來創建對象的方法--一閃而過

list text body 年齡 style -s 冒號 pan bsp <body><script type="text/jscript">   //使用new來創建   var stu=new Object();     stu.name="

ASP.NET MVC5+EF6+EasyUI 後臺管理系統1-前言目錄持續更新...

編碼規範 圖標 pri log 任務 ros 部署 基本 form 開發工具:VS2015(2012以上)+SQL2008R2以上數據庫    您可以有償獲取一份最新源碼聯系QQ:729994997 價格 666RMB 升級後界面效果如下: 日程管理 http://

漢明碼Hamming編碼糾錯原理

長度 錯誤 推導 發生 方法 ... 編解碼 x11 code 一 漢明碼的編解碼說明 (一)編碼   Hamming(12,8)   N=12,表示編碼後的比特長度   K=8,待編碼數據的比特長度   R=N-K=4,校驗位的比特長度   D=3 漢明距離:相鄰

StormTask數的設置計算1.0.1版本

null 英文 如果 之間 one 很多 ask 其他 tar ==思考問題1== 向集群提交一個拓撲的時候,Storm是如何計算Task數以及Executor數的? ==思考問題2:== 構建拓撲的時候,有3個地方會影響task數,這3個地方之間有什麽關系? bui

JS對象的特征:封裝函數

函數 property 對象 調用 一個 .proto .get 定義 col 面向對象的特征 1、第一個特征:封裝 1.1概念:隱藏實現細節的過程 1.2優點:重用和隱藏細節 Java裏面有權限修飾符,但是JS裏面沒有,JS所有的屬性都是公共的,為了讓屬性私有化,就有相

Navicat從mysql導完整表包括表結構其中數據到另一臺機器的mysql

網上 操作 數據表 tail 研究 新的 完成 新建 文件 碰到一個需要把數據表從本地mysql導入到服務器的mysql中的問題,在網上搜了下,沒有發現說的很清楚的操作,很多操作都是利用命令行來實現,自己研究了一下,發現Navicat有自己的導入導出功能,可以比較容易的實現

js常用到的一些解決問題方法整理一些真正有效能夠使用到專案的方法等待不斷更新積累

將字串中某個字串刪除 方法一:使用replace函式替換(比較建議使用 //去除字串中含有的- var str = '178-1980'; //注意:此處不可寫作:str.replace('-', '');要寫作:str = str.replace('-', ''); // rep

SparkStandalone的兩種提交模式Standalone-client模式Standalone-cluster模式

Spark中Standalone有兩種提交模式,一個是Standalone-client模式,一個是Standalone-cluster模式。 1.Standalone-client提交任務方式 提交命令 ./spark-submit --master spark:/

Eclipse svn 分支,主幹 合併同步比較好理解的

Eclipse 中svn的合併與同步: 1、 從主幹拉取到分支: 然後一直下一步,到完成就OK了。 2、 從分支程式碼合併到主幹: 2.1、先將本地需要提交更新的程式碼提交更新到svn分支去 2.2、將本地路徑切換到需要合併程式碼的主幹去(就是切換工作空間,切換到主幹工作

Map集合value方法keySet、entrySet()區別

Map<String,String> map = new HashMap<String,String>();map.put(“01”, “zhangsan”);map.put(“02”, “lisi”);map.put(“03”, “wangwu”);Collection<St

高斯Gaussian濾波、Median濾波雙邊Bilateral濾波的特點

影象預處理過程中,常常會遇到類似這樣問題:有沒有一個“好”的演算法?例如,有沒有一個好的邊緣檢測演算法,或者有沒有一個好的濾波演算法?但通常來說,沒有一個演算法能夠滿足通用性要求,每個演算法都有各自的特點。因此,對於這類問題,最先要問的是:我要解決什麼問題,為什

Vue.js基礎學習三、Class Style 繫結

Class 與 Style 繫結 Class 與 Style 繫結 1.建立一個 Vue 例項 1.1 物件語法 1.2 陣列語法 1.3 用在元件上 2.繫結內聯樣式 2.1

http傳輸字元編碼轉義深度好文

一、引言         最近陸陸續續看了好多關於位元組、字元、字元編碼、字元轉義的文章,終於對這個過程有了比較清晰深刻的認識。和後臺開發相結合知道了亂碼出現的理論具體原因,和前臺開發結合知道了g

JS數據結構之檢索算法查找算法

als while pan ret turn 二分 find rbo font 順序查找 查找指定值 function seqSearch(arr, data) {   for (var i = 0; i < arr.length; ++i) {     if (a

Java的面向物件、繼承介面封裝

Java面向物件程式設計有四(三)大特性:繼承、封裝、多型、(抽象)。今天就從這三個方面進行學習。最簡單的思路,首先,繼承,封裝,多型是什麼意思,然後要了解到,他們到底有什麼用。每一項設計都是有意義,有作用的,知道為什麼用,有什麼用,才能更好的理解。(這點有人總結的很好,wh

字元編碼字符集Encoding&CharSet——害死多少程式設計師

           之前在書上看過編碼和字符集,也遇到一些亂碼問題。但是之前並沒有真正區分字符集和字元編碼。最後亂碼問題還是不能解決。一般在同一個語言、平臺上就能夠正確顯示,因為他們預設的字符集都是

js =====區別兩個等號三個等號 《轉》

== equality 等同,=== identity 恆等。 ==, 兩邊值型別不同的時候,要先進行型別轉換,再比較。 ===,不做型別轉換,型別不同的一定不等。 下面分別說明: 先說 ===,這個比較簡單。下面的規則用來判斷兩個值是否===相等: 1、如果型別不同,就[不相等] 2、如果兩個都是數值