lash as2/as3 向后台傳參數url編碼 urlencode(解決中文傳參亂碼問題)


flash as2/as3 向后台傳參數url編碼 urlencode(解決中文傳參亂碼問題)

flash as2中:

getURL("input.aspx?type="+ "中文", "_blank");

這樣的做法時常會遇到后台無法正確解析這里所謂字符串“中文”現象,而用escape()將參數轉成url編碼的格式,問題就解決了

getURL("input.aspx?type="+escape("中文"), "_blank");

 

flash as3中:

用encodeURI()

 

flash AS3中的urlencode函數與javascript中的ulrencode函數是一樣的,分別是escape、encodeURI、encodeURIComponent三個函數。我們看下面一段例子:

 

ActionScript 3:

var a:String = "超越夢想#";

trace(escape(a)); //%u8D85%u8D8A%u68A6%u60F3%23

trace(encodeURI(a)); //%E8%B6%85%E8%B6%8A%E6%A2%A6%E6%83%B3#

trace(encodeURIComponent(a)); //%E8%B6%85%E8%B6%8A%E6%A2%A6%E6%83%B3%23

 

JavaScript:

var a = "超越夢想#";

alert(escape(a)); //%u8D85%u8D8A%u68A6%u60F3%23

alert(encodeURI(a)); //%E8%B6%85%E8%B6%8A%E6%A2%A6%E6%83%B3#

alert(encodeURIComponent(a)); //%E8%B6%85%E8%B6%8A%E6%A2%A6%E6%83%B3%23

 

三個函數的的區別也和javascript的一樣,一般情況下如果你把這段字符串當作參數傳輸就用encodeURIComponent,如果你只是把一個URL中的非字母數字等字符轉化成%的形式,就用encodeURI,他們的區別就在於對於URL中的特殊字符例如 # 和 / 理解不同, 前者會轉化掉,后者會認為這是url的一部分,保留原有形式。

下面列舉AS3中三個函數的具體說明:

escape:

將參數轉換為字符串,並以 URL 編碼格式對其進行編碼,在這種格式中,大多數非字母數字的字符都替換為 % 十六進制序列。 當用於 URL 編碼的字符串時,百分號 (%) 用於引入轉義字符,不與模運算符 (%) 等效。

 

下表顯示不會 由 escape() 函數轉換為轉義序列的所有字符。

未編碼的字符

0 1 2 3 4 5 6 7 8 9

a b c d e f g h i j k l m n o p q r s t u v w x y z

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

@ - _ . * + /

 

參數  str:String — 要轉換為字符串並以 URL 編碼格式進行編碼的表達式。

返回  String — 一個 URL 編碼的字符串。

 

encodeURI:

將字符串編碼為有效的 URI(統一資源標識符)。 將完整的 URI 轉換為一個字符串,其中除屬於一小組基本字符的字符外,其它所有字符都編碼為 UTF-8 轉義序列。

下表顯示不會由encodeURI函數轉換為 UTF-8 轉義序列的基本字符的整個集合。

未編碼的字符

0 1 2 3 4 5 6 7 8 9

a b c d e f g h i j k l m n o p q r s t u v w x y z

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

; / ? : @ & = + $ , #

- _ . ! ~ *  ( ) 還有單引號

參數

uri:String— 一個表示完整 URI 的字符串。

返回

String— 一個字符串,其中某些字符已編碼為 UTF-8 轉義序列。

 

encodeURIComponent:

將字符串編碼為有效的 URI 組件。 將 URI 的子字符串轉換為以下字符串:除屬於非常小的一組基本字符的字符外,其它所有字符都編碼為 UTF-8 轉義序列。

encodeURIComponent()函數與encodeURI()函數不同,它僅適用於 URI 字符串的一部分(稱為 URI 組件)。 URI 組件是指出現在某些特殊字符之間的任何文本,這些特殊字符稱為組件分隔符(: / ; and ?). “http”和“www.adobe.com”是常見的 URI 組件示例。

此函數與encodeURI()的另一個重要區別是:由於此函數假定它處理的是 URI 組件,因此它會將特殊分隔符字符 (; / ? : @ & = + $ , #) 視為應進行編碼的常規文本。

下表顯示不會由encodeURIComponent函數轉換為 UTF-8 轉義序列的所有字符。

未編碼的字符

0 1 2 3 4 5 6 7 8 9

a b c d e f g h i j k l m n o p q r s t u v w x y z

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

- _ . ! ~ *  ( ) 還有單引號

參數

uri:String

返回

String

 

AS3中的encodeURI,encodeURIComponent,decodeURI以及decodeURIComponent

在ActionScript 3中,除了escape和unescape兩個字符串編碼和解碼函數以外,新增了encodeURI,encodeURIComponent,decodeURI,decodeURIComponent四個函數

 

(一)、如果你在實際項目AS2中用的是escape,而在js中用了unescape,卻始終得不到原始的值, 那么原因就是在AS2中,沒有與js的escape對應的函數,而AS2中的escape,實現的卻是其他語言中的encodeURI或URIEncode的功能,AS3中,終於把escape和encodeURI區分開來了,AS3中的encodeURI和decodeURI與AS2中的escape和unescape大體相似,但要要根據具體未編碼字符而定。例如:

在as2中:

trace(escape("超越夢想#"));             //輸出:%E8%B6%85%E8%B6%8A%E6%A2%A6%E6%83%B3%23

在as3中:

trace(encodeURI("超越夢想#"));          //輸出:%E8%B6%85%E8%B6%8A%E6%A2%A6%E6%83%B3#

trace(encodeURIComponent("超越夢想#")); //輸出:%E8%B6%85%E8%B6%8A%E6%A2%A6%E6%83%B3%23

 

(二)、AS3中的encodeURI和decodeURI與AS2中escape和unescape不一樣的地方:

在AS2中,System.useCodepage影響escape對雙字節字符編碼和解碼的結果,注意下面System.useCodepage設為true和false的時候,輸出是不同的:

System.useCodepage=true;

trace(escape("超越夢想#")); //輸出:%B3%AC%D4%BD%C3%CE%CF%EB%23

 

System.useCodepage=false;

trace(escape("超越夢想#")); //輸出:%E8%B6%85%E8%B6%8A%E6%A2%A6%E6%83%B3%23

 

在AS3中,System.useCodepage不影響decodeURI的結果,兩個結果是一樣的:

System.useCodePage = true;

trace(encodeURI("超越夢想#")); //輸出:%E8%B6%85%E8%B6%8A%E6%A2%A6%E6%83%B3#

 

System.useCodePage = false;

trace(encodeURI("超越夢想#")); //輸出:%E8%B6%85%E8%B6%8A%E6%A2%A6%E6%83%B3#

 

在AS3中,escape同樣也不受System.useCodePage的影響:

System.useCodePage = true;

trace(escape("超越夢想#")); //輸出:%u8D85%u8D8A%u68A6%u60F3%23

 

System.useCodePage = false;
trace(escape("超越夢想#")); //輸出:%u8D85%u8D8A%u68A6%u60F3%23

這說明在AS3中,所有運用到escape和encodeURI的地方,都不能再通過設置System.useCodePage來改變編解碼的方式,與后台或其他程序語言交互就必須考慮這個問題,以后后台編碼的時候,記得要以UTF-8編碼,否則decodeURI就會拋出URIError,提示無效的URI;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM