• Flash as2/as3 向后台传参数url编码 urlencode(解决中文传参乱码问题)


    转载于:https://www.cnblogs.com/mfryf/archive/2012/06/12/2545757.html

    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;

  • 相关阅读:
    2019.6.20刷题统计
    36 线程 队列 守护线程 互斥锁 死锁 可重入锁 信号量
    35 守护进程 互斥锁 IPC 共享内存 的方式 生产者消费者模型
    34 进程 pid ppid 并发与并行,阻塞与非阻塞 join函数 process对象 孤儿进程与僵尸进程
    33 udp 域名 进程
    32 粘包 文件传输
    31 socket客户端. 服务器 异常 语法
    30 网络编程
    29 元类 异常
    26 封装 反射 常用内置函数
  • 原文地址:https://www.cnblogs.com/dt1991/p/12627954.html
Copyright © 2020-2023  润新知