2005-12-28 13:42 LoadVars外部資料脫逸
使用LoadVars讀取外部變數資料的時候
外部資料格式通常是以raw data或是&key=value&方式撰寫
假如想要在&key=value&方式中value使用"&"字元
要先把"&"字元跳脫,不然會被當作分隔字元處理
比較統一的做法可以把整個value作escape、URLEncoding的動作
像原本
"台北市&"
資料經過Big5編碼跳脫之後,變成
"%A5x%A5%5F%A5%AB%26"
&area=%A5x%A5%5F%A5%AB%26&
使用的時候就不用擔心"&"字元被當作分隔符號處理
而Flash LoadVars讀取這種資料時
也會自動作unescape的動作
假如使用UTF-8,是正常的
但是假如使用Big-5就會出現問題了
LoadVars無法正常地將Big5編碼跳脫的資料正確還原
以上面的例子來說
"台北市"就會變成"x北市"
這應該是LoadVars.onData函式的問題
可以使用下面的方式覆寫onData
強制讓它作比較正確的unescape動作
但是使用舊式的做法loadVariables卻沒有發現這個問題~~
不過那實在太難用了,不用也罷
總歸一句話,能用UTF-8是最好的
否則編碼的問題永遠搞不完
要不是因為那個爛爛的ASP
也不會遇到這麼多問題
更正,應該是LoadVars.decode的問題
外部資料格式通常是以raw data或是&key=value&方式撰寫
假如想要在&key=value&方式中value使用"&"字元
要先把"&"字元跳脫,不然會被當作分隔字元處理
比較統一的做法可以把整個value作escape、URLEncoding的動作
像原本
"台北市&"
資料經過Big5編碼跳脫之後,變成
"%A5x%A5%5F%A5%AB%26"
&area=%A5x%A5%5F%A5%AB%26&
使用的時候就不用擔心"&"字元被當作分隔符號處理
而Flash LoadVars讀取這種資料時
也會自動作unescape的動作
假如使用UTF-8,是正常的
但是假如使用Big-5就會出現問題了
LoadVars無法正常地將Big5編碼跳脫的資料正確還原
以上面的例子來說
"台北市"就會變成"x北市"
這應該是LoadVars.onData函式的問題
可以使用下面的方式覆寫onData
強制讓它作比較正確的unescape動作
System.useCodePage = true;//注意這是在Big5編碼環境下
if (LoadVars.prototype._onData == null) {
LoadVars.prototype._onData = LoadVars.prototype.onData;
LoadVars.prototype.onData = function(raw) {
this._onData(unescape(raw));
};
}
但是使用舊式的做法loadVariables卻沒有發現這個問題~~
不過那實在太難用了,不用也罷
總歸一句話,能用UTF-8是最好的
否則編碼的問題永遠搞不完
要不是因為那個爛爛的ASP
也不會遇到這麼多問題
更正,應該是LoadVars.decode的問題
if (LoadVars.prototype._decode == null) {
LoadVars.prototype._decode = LoadVars.prototype.decode;
LoadVars.prototype.decode = function(raw) {
this._decode(unescape(raw));
};
}回應

