| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
用Google的Gmail收
以太网络提供200M
霞光科技50M/Htm/
读取XML当中的HTM
再探FlashCom的HT
关于Flash+HTML实
html为flash设定变
能导入Html的自适
在Flex中嵌入完整
BitmapData.draw方

在HTML中传送中文到Flash研究           

在HTML中传送中文到Flash研究

作者:佚名 来源:luarblog 作者: luar 更新:2007-1-13 20:47:16 错误报告 我要投稿

在HTML中传送参数到Flash,常用的方法有两种:路径参数(foo.swf?par=123)或FlashVars(<param name="FlashVars" value="par=123" />),参数又可以再分为是否URLEncoded;对于传送中文,又再分为非Unicode(Big5/GB2312)和Unicode。最后IE和Mozilla处理上又有分别,换句话说,总共有2*2*2*2=16种可能性。

再加上SWF格式为Flash5或以前,Flash是用使用者系统编码处理中文(非Unicode),Flash6或以后,Flash是用Unicode处理中文。因此,在HTML中传送中文到Flash,看似很简单的事,其实包含很多复杂的变化。(16*2=32种可能!!)

在新技术涌现的时代,要将参数传送到Flash,可以用LoadVars、XML、Flash Remoting和Web Services等,但是在非Browser和连线的环境下,例如嵌入装置、Flash嵌入其他程式和Server-side的Flash执行环境,仍然需要靠「路径参数」这方法传送参数到Flash。

以下讲解会以Big5和Unicode为例,比较处理非Unicode和Unicode中文的分别,对于GB2312处理方法,跟Big5相同。第二,例子会用一个中英文混合句子来示范:
可以支援非Unicode的URLEncoded中文了!
Big5 URLEncoded为:



%A5i%A5H%A4%E4%B4%A9%ABDUnicode%AA%BAURLEncoded%A4%A4
%A4%E5%A4F%A1I

UTF-8 URLEncoded为:


%E5%8F%AF%E4%BB%A5%E6%94%AF%E6%8F%B4%E9%9D%9EUnicode
%E7%9A%84URLEncoded%E4%B8%AD%E6%96%87%E4%BA%86%EF%BC
%81

路径参数

一个SWF格式为Flash6或以后,以路径参数传送中文,有以下结果:

Big5: debugTxt.swf?inTxt=%A5i%A5H...


Big5: debugTxt.swf?inTxt=可以...


UTF-8: debugTxt.swf?inTxt=%E5%8F...


UTF-8: debugTxt.swf?inTxt=可以...


Unicode当然没有什么问题,只是Big5 URLEncoded会出现乱码,在Mozilla情况更坏,无论是否URLEncoded,都是乱码。


Big5: debugTxt.swf?inTxt=%A5i%A5H...


Big5: debugTxt.swf?inTxt=可以...

第一个本能反应,当然是在Flash裡加上

System.useCodepage = true;
打开swfpath\original\debugTxt.fla看看,其实早已加了,但不起作用。因为所有参数都是在任何ActionScript执行前,已经进入了Flash,所以Flash是用Unicode去解码这些URLEncoded的Big5,结果发生乱码。

解决方法,当然是使Flash预设不是Unicode解码,怎可能?将SWF发佈成Flash5就可以!Flash5的SWF只是一个加载器,主要用作接收参数,然后将真正的Flash加载到_level0,并传入参数,这样真正的Flash已经完全取代了Flash5的SWF,只要Flash Player是6/7,仍然可以执行Flash6/7支援的ActionScript。

loadMovieNum("debugTxt2.swf?inTxt="+inTxt, 0);

不过,唯一要留意,由于Flash接收时已经将参数URLDecoded,再传入真正的Flash时,也是用Unicode去接收/解码Big5的参数,仍有危机出现乱码,因此应该将参数两次URLEncoded,变成普通的英文字元:

loadMovieNum("debugTxt2.swf?inTxt="+escape(escape(inTxt)), 0);
到了真正的Flash时,先解除Flash预设的Unicode解码,才去URLDecode接收的参数:


System.useCodepage = true;
debugtxt.text = unescape(inTxt);

[范例下载]swfpath.zip
FlashVars

改用FlashVars传送参数,无论IE/Mozilla,只有Big5 URLEncoded会出现乱码,其他Big5 URLDecoded, UTF-8 URLEncoded/URLDecoded都是正常:

Big5: debugTxt.swf?inTxt=%A5i%A5H...


Big5: debugTxt.swf?inTxt=%A5i%A5H...

用刚才方法去解决,结果出现了乱码:

在Flash5的SWF进行URLEncode时字与字之间多了%C2:

%C2%A5i%C2%A5H%C2%A4%E4%B4%A9%C2%ABDUnicode%C2%AA
%C2%BAURLEncoded%C2%A4%C2%A4%C2%A4%EF%BF%BD%C2%A1I

因此在真正的Flash,要将%C2弄走才进行URLDecode:


System.useCodepage = true;
inTxt = unescape(inTxt.split("%C2").join(""));
debugtxt.text = inTxt

遗憾的是,有一些字元,在FlashVars传到Flash时,已经被破坏了,最后仍然是乱码,例如「文」字:

Big5: debugTxt.swf?inTxt=%A5i%A5H...


Big5: debugTxt.swf?inTxt=%A5i%A5H...

下载范例flashvars.zip

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。