ASP Jscriptの2つの特殊な問題

2848 ワード

従来のASP(Jscript,非VBScript)で2つの特殊な問題に遭遇したことを特記した.

一、Global.asaは中国語を排斥する


ASPプログラムのルートディレクトリの下にあるglobal.asaファイルは、アプリケーションの起動ファイルです.VBScript/Jscriptで記述できます.しかし、プロファイルの作成中にGlobalが見つかりました.asaはASCIIコードでしか保存できないので、直接中国語を使うことはできません.これはマイクロソフトの設計上の不足と言わざるを得ない--現在の最新のIISもこの問題を解決していない(現在の環境はIIS 8 Express).外部からファイルを導入する場合は、次のようになります.
<script runat="server" language="ecmascript" src="/public/config.js"></script>
<script runat="server" language="ecmascript" src="/public/section.js"></script>
<script runat="server" language="ecmascript" src="/bigfoot/asp_init.js"></script>
も効果がありません.これに鑑みて、中国語を特殊符号化しなければならないのはASCII符号化セットの範囲を超えていないからである.そこで、JavaScript言語自体はunicode文字列の16進数表記をサポートしており、「u 96 c 6u 56 e 2u 6982u 51 b 5」のように表示されているのに「集団概況」の値であることを思い出す.入力は中国語ではありませんが、表示中にJSは自動的に復号され、人間が正しく読む文字が表示されます.これは私たちの現在のニーズをよく満たしています.次に、上記の中国語の符号化アルゴリズムを見つけました.
function encodeUnicode(str){  
        var arr = [];  
        var hex;  
        for (var i = 0 , j = str.length; i < j; i++) {  
            hex = ("00" + str.charCodeAt(i).toString(16)).slice(-4);  
            if(hex.length < 4){ //        
                hex = '0' + hex;  
            }  
            arr.push(hex);  
        }  
          
        return "\\u" + arr.join("\\u");  
 }  
は(手動で復号する必要はありません):
function un(str) {  
       return unescape(str.replace(////g, "%"));  
}

JSONプロファイルを保存するときは、encodeUnicode(json)を呼び出せばよい.実際、この問題の解決方法については、弟が以前書いた博文に啓発された.「Javascript中国語エスケープ文字」だ.

二、アプリケーションオブジェクトの配列異常を読み取る


以下に修正します.
var newObj = [];

/**
 * @private
 * @param {mixed} v
 * @return {Boolean}   hash(    )。
 */
function isArray(v){
    return !!v && (isArray.toString.call(v) != isArray.token) && v.length && typeof v != 'string' && typeof v != 'function';
}
 isArray.toString = Object.prototype.toString
,isArray.token      = '[object Object]';


(function(source, target){
    var sourceObj ,targetObj;
        
    for(var i = 0, j = source.length; i < j; i++){
        
         sourceObj = source[i]
        ,targetObj = {};
        
        for(var k in sourceObj){
            var el = sourceObj[k];
            // Array
            targetObj[k] = isArray(el) ? arguments.callee(el, []) : el;
        }
        target.push(targetObj);
    }
    return target;
})(Application.staticObjects("dict").Item('$$_site'), newObj);