针对有网友说看不见文章内容, 现提示如下: 点击每一个标题行任一地方都会展开和隐藏此文章内容(不要点击标题). 目前展开隐藏功能只支持IE浏览器,虽然可以改成支持FF浏览器,不过现在一直没时间去弄,等有时间再修改了。 |
blog名称:乱闪Blog 日志总数:267 评论数量:1618 留言数量:-26 访问次数:2672770 建立时间:2005年1月1日 |
|

| |
在HTML中傳送中文到Flash研究
|
在HTML中傳送中文到Flash研究
500)this.width=500'>
在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或以後,以路徑參數傳送中文,有以下結果:
500)this.width=500'>Big5: debugTxt.swf?inTxt=%A5i%A5H...
500)this.width=500'>Big5: debugTxt.swf?inTxt=可以...
500)this.width=500'>UTF-8: debugTxt.swf?inTxt=%E5%8F...
500)this.width=500'>UTF-8: debugTxt.swf?inTxt=可以...
Unicode當然沒有什麼問題,只是Big5 URLEncoded會出現亂碼,在Mozilla情況更壞,無論是否URLEncoded,都是亂碼。
500)this.width=500'>Big5: debugTxt.swf?inTxt=%A5i%A5H...
500)this.width=500'>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);
[範例下載]
FlashVars
改用FlashVars傳送參數,無論IE/Mozilla,只有Big5 URLEncoded會出現亂碼,其他Big5 URLDecoded, UTF-8 URLEncoded/URLDecoded都是正常:
500)this.width=500'>Big5: debugTxt.swf?inTxt=%A5i%A5H...
500)this.width=500'>Big5: debugTxt.swf?inTxt=%A5i%A5H...
用剛才方法去解決,結果出現了亂碼:
500)this.width=500'>Big5: debugTxt.swf?inTxt=%A5i%A5H...
500)this.width=500'>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時,已經被破壞了,最後仍然是亂碼,例如「文」字:
500)this.width=500'>Big5: debugTxt.swf?inTxt=%A5i%A5H...
500)this.width=500'>Big5: debugTxt.swf?inTxt=%A5i%A5H...
[範例下載]
URLEncoding其他參考資料
Flash TechNote - URL Encoding: Reading special characters from a text file
本文章由luar發表。 |
|
回复:在HTML中傳送中文到Flash研究
|
replica
louis vuitton handbag
louis
vuitton damier geant canvas
burberry
replica
replica
mahina
leather
bag women
replica
burberry wallet
evening
clutch bag
louis
vuitton leather
men
watch
louis
vuitton taiga leather
fake
louis vuitton wallets
taiga
leather
louis
vuitton damier
louis
vuitton monogram canvas
replica
burberry
lv
necklace
louis
v wallet
nomade
leatherpdofu posd ufp dsjfpo sdpof pdjs |
电脑与网络 louis vuitton(游客)发表评论于2010/5/21 21:39:53 |
| |
回复:在HTML中傳送中文到Flash研究
|
mba团购报名开始啦!我公司主要生产化工泵 法兰 船用阀门,需要请与我们联系…… |
电脑与网络 ddd(游客)发表评论于2010/1/27 15:13:36 |
| |
回复:在HTML中傳送中文到Flash研究
|
以下引用AiHua(游客)在2005-9-12 21:05:40的评论:555
aqian#%*091215Coach Handbagswholesale scarvescheap sunglassesReplica sunglassesReplica Louis Vuittonreplica Handbagsreplica cartier watchesreplica breitling watchesrolex watches replicaomega replica watches Dewitt watchesShow Winter 2008Louis Vuitton watches Louis Vuitton watchesCartier watches Cartier watchesChopard watches Chopard watchesLink watches Replica ChloeDamier GeantConcord watches Concord watchesDior watches Dior watchesCHLOEReplica Louis VuittonLongines WatchesTSG Heuer watches TSG Heuer watchesOyster watchesCorum watches Corum watchesBurberry Scarfreplica cartier watchesAion KinahCHLOEMonogram MulticoloreTSG Heuer watchesTechnomarine watches Technomarine watches |
电脑与网络 honeyreplica(游客)发表评论于2009/12/15 11:30:29 |
| |
回复:在HTML中傳送中文到Flash研究
|
电脑与网络 AiHua(游客)发表评论于2005/9/12 21:05:40 |
| |
回复:在HTML中傳送中文到Flash研究
|
电脑与网络 妈咪(游客|218.14.4.241)发表评论于2005/7/25 6:02:33 |
| |
» 1 »
|