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(
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");
相關推薦
JS中encodeURIComponent(URL)編碼與decodeURIComponent(URL)解碼詳解
(1) encodeURIComponent(url) 函式 定義和用法 encodeURIComponent() 函式可把字串作為 URI 元件進行編碼。 語法
關於JS中事件捕獲,事件冒泡與事件代理(事件委託),及e.target與e.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 漢明距離:相鄰
Storm中Task數的設置與計算(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
Spark中Standalone的兩種提交模式(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、如果兩個都是數值