Firecookie の日本語が化けないようにする

  Firecookie の仕様と変更部分



サーバー側のキャラクタセットやエンコード方法は特に考慮されずに、クライアントの escape でエンコードされた文字列のみ正しく表示されます( 結果的に UTF-8 で表現されたもの )

PHP でクッキーをセットした場合は、単純にそのキャラクタセットで %エンコーディングされるので正しく表示されません。

そこで、Escape Codec Library: ecl.js を使用した上で、fireCookie.js を変更します。

2011/01/09 現在、ecl.js の配布先が存在しません。Vector からダウンロードはできるのですが、IE 系ブラウザでパフォーマンスが悪いそうなので、別のプログラマさんが、改良版が配布されています。 もし、上記ページもなくなったら困るので、以下のリンクを用意しておきます
ecl_new.txt

以下のコードによって、キャラクタセットを判定し、正しい表示へと変換して、RAW データの横にそのキャラクタセットを表示するようにしました。

Firecookie_p

fireCookie.js
function makeCookieObject(cookie)
{
    // Remember the raw value.
    var rawValue = cookie.value;

    // Unescape '+' characters that are used to encode a space.
    // This isn't done by unescape method.
    var value = cookie.value;
    if (value) {
        value = value.replace(/\+/g, " ");
    }

    var optionValue = "";
    var optionRowValue = "";
    if ( value.indexOf("%") != -1 ) {
        try {
           optionValue = GetEscapeCodeType(value);
           optionRowValue = " : charset( " + optionValue + " )";
           if ( optionValue == "UTF8" ) {
               optionValue = UnescapeUTF8(value);
           }
           if ( optionValue == "EUCJP" ) {
               optionValue = UnescapeEUCJP(value);
           }
           if ( optionValue == "SJIS" ) {
               optionValue = UnescapeSJIS(value);
           }
           if ( optionValue == "Unicode" ) {
               optionValue = unescape(value);
           }
        } catch( e ) { optionValue = value }
    }
    else {
        optionValue = value;
    }

    var c = { 
        name        : cookie.name,
        value       : optionValue,
        isDomain    : cookie.isDomain,
        host        : cookie.host,
        path        : cookie.path,
        isSecure    : cookie.isSecure,
        expires     : cookie.expires,
        isHttpOnly  : cookie.isHttpOnly,
        rawValue    : rawValue + optionRowValue
    };

    return c;
}

以下は、fireCookie.xul の一部分ですが、同じフォルダに、ecl.js をダウンロードして使用します
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> 
    <script src="chrome://firecookie/content/fireCookie.js" type="application/x-javascript"/> 
    <script src="chrome://firecookie/content/ecl.js" type="application/x-javascript"/> 




  fireCookie.js のある場所



Firefox のプロファイル をダウンロードしてフォルダを開けて、その中の無作為な文字列で構成されたフォルダ(.default)の中に入り、そこから以下のフォルダへ入ります。

extensions\firecookie@janodvarko.cz\chrome\content\firecookie





  クッキーの値を変更する場合

編集ダイアログで化けないようにするには、editCookie.js の、onLoad にある、

this.valueNode.value = unescape(this.cookie.rawValue);

を、

this.valueNode.value = unescape(this.cookie.value);

に変更します。

(注意)
編集ダイアログで、変更を行うと、データが Unicode に変換されてしまう為、サーバーの
データである場合は変更そのものを Firecookie で行ってはいけません。


Firecookie_e












  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ