LoadVars外部資料脫逸 @ Ticore's Blog :: 隨意窩 Xuite日誌
  • Site Search
  • Google
    Web Ticore's Blog
  • 最新文章
  • Recent Comments
  • 2005-12-28 13:42 LoadVars外部資料脫逸
    平均分數:0 顆星    投票人數:0
    我要評分:
    使用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動作
    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));
    };
    }

    Ticore / Xuite日誌 / 回應(0) / 引用(0) / 好文轉寄
    回應