M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2007年11月20日 16:36

MacIE5でdecodeURIを実装

このエントリーをはてなブックマークに追加 mixiチェック

MacIE5でdecodeURI()が必要になったんで、作ったけど、これでいいのかな。

    if (typeof decodeURI != 'function') {
      decodeURI = function (s) {
        // via http://homepage3.nifty.com/aokura/jscript/utf8.html
        var _from_utf8 = function(s) {
          var c, d = "", flag = 0, tmp;
          for (var i = 0; i < s.length; i++) {
            c = s.charCodeAt(i);
            if (flag == 0) {
              if ((c & 0xe0) == 0xe0) {
                flag = 2;
                tmp = (c & 0x0f) << 12;
              } else if ((c & 0xc0) == 0xc0) {
                flag = 1;
                tmp = (c & 0x1f) << 6;
              } else if ((c & 0x80) == 0) {
                d += s.charAt(i);
              } else {
                flag = 0;
              }
            } else if (flag == 1) {
              flag = 0;
              d += String.fromCharCode(tmp | (c & 0x3f));
            } else if (flag == 2) {
              flag = 3;
              tmp |= (c & 0x3f) << 6;
            } else if (flag == 3) {
              flag = 0;
              d += String.fromCharCode(tmp | (c & 0x3f));
            } else {
              flag = 0;
            }
          }
          return d;
        }
        return _from_utf8(unescape(s));
      }
      decodeURIComponent = decodeURI;
    }

使うときは普通に

alert(decodeURI('%E3%81%BF%E3%82%93%E3%81%AA%E3%82%A8%E3%83%AD%E3%82%A4%E3%81%AD') );

でつかえますー

TransURI (UTF-8) [nurucom-archives.hp.infoseek.co.jp] ていうのもあるけれども、正規表現の中に無名関数を住まわせるタイプの置換はMacIE5のJavaScriptじゃあサポートされていなく悲しい結果になるので、Unicode ⇔ UTF-8 - by AOK [homepage3.nifty.com] を使いまして、ブラウザにビルトインで用意されている場合は上書きしないようにしてみた。

JavaScriptはよくわかんないなー

投稿 大野 義貴 [Script] | |

トラックバック(1)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/2288

MacIE5でArray.pushが必要になったんで、作りました。以下のコードをJavaScriptのコードに入れておくと、Arrayオブジェクトにpushメソッドが追加されます。pushメソッドが既にある場合は、上書きしません。 // Array.pushをMacIE5に実装 if (typeof Array.prototype.push != 'function') { Array.prototype.push = function (f){ this[this.length] = f; } }... 続きを読む

コメントする