js的escape()、encodeURI()、encodeURIComponent()區別詳解

来源:http://www.cnblogs.com/shouce/archive/2016/04/01/5343604.html
-Advertisement-
Play Games

JavaScript中有三個可以對字元串編碼的函數,分別是: escape,encodeURI,encodeURIComponent,相應3個解碼函數:unescape,decodeURI,decodeURIComponent 。 下麵簡單介紹一下它們的區別 1 escape()函數 定義和用法es ...


JavaScript中有三個可以對字元串編碼的函數,分別是: escape,encodeURI,encodeURIComponent,相應3個解碼函數:unescape,decodeURI,decodeURIComponent 。

下麵簡單介紹一下它們的區別

1 escape()函數

定義和用法
escape() 函數可對字元串進行編碼,這樣就可以在所有的電腦上讀取該字元串。

語法
escape(string)

參數  描述
string  必需。要被轉義或編碼的字元串。

返回值
已編碼的 string 的副本。其中某些字元被替換成了十六進位的轉義序列。

說明
該方法不會對 ASCII 字母和數字進行編碼,也不會對下麵這些 ASCII 標點符號進行編碼: -_ . *

其他所有的字元都會被轉義序列替換。

 
2 encodeURI()函數 
定義和用法
encodeURI() 函數可把字元串作為 URI 進行編碼。

語法
encodeURI(URIstring)

參數  描述
URIstring  必需。一個字元串,含有 URI 或其他要編碼的文本。

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

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

該方法的目的是對 URI 進行完整的編碼,因此對以下在 URI 中具有特殊含義的 ASCII 標點符號,encodeURI() 函數是不會進行轉義的:;/?:@&=+$,#

 
3 encodeURIComponent() 函數

定義和用法
encodeURIComponent() 函數可把字元串作為 URI 組件進行編碼。

語法
encodeURIComponent(URIstring)

參數  描述
URIstring  必需。一個字元串,含有 URI 組件或其他要編碼的文本。

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

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

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

提示和註釋
提示:請註意 encodeURIComponent() 函數 與 encodeURI() 函數的區別之處,前者假定它的參數是 URI 的一部分(比如協議、主機名、路徑或查詢字元串)。因此 encodeURIComponent() 函數將轉義用於分隔 URI 各個部分的標點符號。

 

4 總結:

通過對三個函數的分析,我們可以知道:escape()除了 ASCII 字母、數字和特定的符號外,對傳進來的字元串全部進行轉義編碼,因此如果想對URL編碼,最好不要使用此方法。而encodeURI() 用於編碼整個URI,因為URI中的合法字元都不會被編碼轉換。encodeURIComponent方法在編碼單個URIComponent(指請求參數)應當是最常用的,它可以講參數中的中文、特殊字元進行轉義,而不會影響整個URL。

 

5 示例:

1 escape()

<script type="text/javascript">

document.write(escape("http://www.w3school.com.cn/") + "<br />")

document.write(escape("?!=()#%&"))

</script>輸出:

http%3A//www.w3school.com.cn

%3F%21%3D%28%29%23%25%26

2 encodeURI()

<script type="text/javascript">

document.write(encodeURI("http://www.w3school.com.cn/")+ "<br />")

document.write(encodeURI("http://www.w3school.com.cn/My first/"))

document.write(encodeURI(",/?:@&=+$#"))

</script>輸出:

http://www.w3school.com.cn/

http://www.w3school.com.cn/My%20first/

,/?:@&=+$#

對整個URL進行編碼,而URL的特定標識符不會被轉碼。

3 encodeURIComponent()

例1:

<script type="text/javascript">

document.write(encodeURIComponent("http://www.w3school.com.cn/"))

document.write("<br />")

document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/"))

document.write("<br />")

document.write(encodeURIComponent(",/?:@&=+$#"))

</script輸出:

http%3A%2F%2Fwww.w3school.com.cn
http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F
%2C%2F%3F%3A%40%26%3D%2B%24%23
例2:<script language="javascript">document.write('

<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a>');</script>

對URL中的參數進行編碼,因為參數也是一個URL,如果不編碼會影響整個URL的跳轉。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 序言 這個AOP要從我們公司的一個事故說起,前段時間公司的系統突然在烏雲中出現,數據被泄露的一覽無餘,烏雲上顯示是SQL註入攻擊。呵,多麼貼近生活的一個露洞,可謂是人盡皆知啊。然而卻華麗麗的給拉我們一記耳光。 那麼問題既然來啦,我們.net組有40-50個項目之多吧,怎麼去一一補救這一過失呢?什麼又 ...
  • 需求:根據年級下拉框的變化使得科目下拉框綁定次年級下對應有的值 我們用三層架構的模式來實現 1.我們想和資料庫交互,我們首先得來先解決DAL資料庫交互層 01.獲得年級下拉框的數據 在GradeDAL類中 02.在業務邏輯層 03.在窗體UI層 在Load事件中載入年級下拉框 其中在使用 獲得年級下 ...
  • 本地文件系統如ext3,reiserfs等 (這裡不討論基於記憶體的文件系統),它們管理本地的磁碟存儲資源、提供文件到存儲位置的映射,並抽象出一套文件訪問介面供用戶使用。但隨著互聯網企業的高 速發展,這些企業對數據存儲的要求越來越高,而且模式各異,如淘寶主站的大量商品圖片,其特點是文件較小,但數量巨大 ...
  • HTML5已經成為最流行的編程語言在web開發者。強大的編程語言有很大的能力,生產更好的萬維網內容。HTML5的興起已經在過去三年增長迅速。介紹了HTML5的新技術是更好的。HTML5技術是由像Chrome的瀏覽器,支持Firefox、IE和更多。今天,我們列出了十個HTML5動畫製作工具,可以幫助 ...
  • 最近的工作在做一個多步驟多分步的表單頁面,這個多步驟多分步的意思是說這個頁面的業務是分多個步驟完成的,每個步驟可能又分多個小步驟來處理,大步驟之間,以及小步驟之間都是一種順序發生的業務關係。起初以為這種功能很好做,就跟tab頁的實現原理差不多,真做下來才發現,這裡面的相關邏輯還是挺多的(有可能是我沒... ...
  • “我們正在用HTML5編寫我們下一套移動產品。”“是啊,這些天很多人在玩著Appcelerator,我也在玩著。”“嗯,但這並不是我要說的那種HTML5產品。” 最近,我有很多類似的交流對話,可能因為我正在開發一套HTML5的應用吧。就像2005年的“AJAX”,“HTML5”這個術語現在還沒有被清 ...
  • 前段時間做項目,有個功能是消息提醒。 我相信很多大牛都做過。下麵來分享我遇到的問題和解決方案。 首先我們的項目是用frameset框架,main代碼。 <frameset name="myFrame" cols="85,*" frameborder="no" border="0" framespac ...
  • 即將從事Web前端的工作的 先對即將從事的行業有個瞭解。 Web前端發展史: 第一個網頁誕生於90年代初,早期的網頁除了一些小圖片和毫無佈局可言的標題段落,其全由文字構成。然而隨著時代的進步,互聯網的不斷發展,接下來出現了表格佈局,此次是flash,最後是基於CSS的網頁設計。不可否認,前端頁面重構 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...