Powered by SmartDoc

mod_chxj

Last modified: Mon Mar 31 20:19:27 JST 2008
Atsushi Konno

目次

Overview

mod_chxjはオープンソースの携帯向けコンテンツ変換Apache2.x用モジュールであり、CHTML(DoCoMo i-Mode用CHTML3.0)で記述された文書や通常のHTMLで記述された文書を、アクセスに来た端末のUser-Agentヘッダを見て、それぞれの端末にあった形式に変換します。HTML文書に限らず、画像(jpg、gif、png)、絵文字についても、定義ファイルに従ってそれぞれのキャリアにあった絵文字に変換します。Cookie非対応端末、Refer非対応端末のために、Set-Cookie、CookieヘッダやRefererヘッダをシミュレートすることもできます(EXPERIMENTAL)。

インストール

準備

mod_chxjをインストールする前に、下記のものを用意する必要があります。

  1. Apache2.xのヘッダーファイル群
  2. Apache2.x用のapxs
  3. apr(Apache Portable Runtime)ライブラリとそのヘッダファイル郡(apu含む)(1)
  4. automake、autoconf、libtool1.3.X
  5. ImageMagick(MagickWand)
  6. Linux
  1. memcacheを使用する場合、apuは0.9.7以降

mod_chxjの入手

mod_chxjはこちらからダウンロードすることができます。

インストール

以下にmod_chxjインストール手順を示します。

  1. Configureスクリプトを生成します(必須ではない)

    Configure スクリプトの生成
    $ ./buildconf.sh
    

    (2)

  2. Configure

    Configure
    $ ./configure
    

    (3)(4)

  3. mod_chxj.soを生成します
    make
    $ make
    
  4. apacheにインストールします
    install
    $ make install
    
  5. データの設置etcディレクトリは以下のdevice_data.xmlとemoji.xmlをApacheからアクセスできるところに配置します。(5)

    以下、/etc/apache2/chxjディレクトリにchxj用設定ファイルを用意する場合

    データの設置
    $ mkdir -p /etc/apache2/chxj
    $ cp etc/device_data.xml /etc/apache2/chxj
    $ cp etc/emoji.xml /etc/apache2/chxj
    
  1. "$"はプロンプトをあらわします。
  2. 場合によっては--with-apr-configや--with-apu-config、--with-pcre-configも必要です。
  3. 詳細はBuildを参照

Build

mod_chxjをコンパイルするにはconfigureを行う必要があります。以下にconfigureのオプションを記します。

メイン

--with-apache-header

通常指定する必要はありません。configureでApacheのヘッダファイルの場所が検知できなかった場合や、任意のApacheヘッダファイルを使用したい場合に指定します。

--with-apache-header
         $ ./configure --with-apache-header=/usr/include/apache2
      

上記は/usr/include/apache2以下にApacheのヘッダファイルがある場合の例です。

--with-apxs

通常指定する必要はありません。configureでapxsを検知できなかった場合や、任意のapxsプログラムを指定したい場合に指定します。

--with-apxs
         $ ./configure --with-apxs=/usr/local/apache2/bin/apxs2
      

上記は/usr/local/apache2/bin/apxs2を使用するようにapxsに指定しています。

--with-apr-config

通常指定する必要はありません。configureでapr-configを検知できなかった場合や、任意のapr-configプログラムを指定したい場合に指定します。

--with-apr-config
$ ./configure --with-apr-config=/usr/local/apache2/bin/apr-1-config
      

上記は/usr/local/apache2/bin/apr-1-configを使用するように指定しています。

--with-apu-config

通常指定する必要はありません。configureでapu-configを検知できなかった場合や、任意のapu-configプログラムを指定したい場合に指定します。

--with-apu-config
$ ./configure --with-apu-config=/usr/local/apache2/bin/apu-1-config
      

上記は/usr/local/apache2/bin/apu-1-configを使用するように指定しています。

Cookieシミュレート機能でMySQLを使用する場合

--enable-mysql-cookie

Cookieシミュレート機能を使用する際、保存先をデフォルトのDBMでは無く、MySQLに保存するようにします。DefaultのDBMで良い場合や、Cookieシミュレート機能を使用しない場合は指定する必要はありません。別途MySQLサーバを用意する必要があります。また、本オプションを指定した場合は、--with-mysql-header、--with-mysql-lib-dirも指定します。これはMySQLのヘッダとライブラリが必要なことを意味します。使用するMySQLのライブラリは今のところlibmysqlclient_r.soのみです。

--enable-mysql-cookie
$ ./configure --enable-mysql-cookie --with-mysql-header=/usr/include/mysql \
    --with-mysql-lib-dir=/usr/lib
      

上記は、/usr/include/mysql以下にmysql用のヘッダがあり、/usr/lib以下にlibmysqlclient_r.soがある場合の例です。

--with-mysql-header

--enable-mysql-cookieを指定した場合は必須です。MySQLのヘッダファイルの場所を指定します。

--with-mysql-header
$ ./configure --enable-mysql-cookie --with-mysql-header=/usr/include/mysql \
    --with-mysql-lib-dir=/usr/lib
      

--with-mysql-lib-dir

--enable-mysql-cookieを指定した場合は必須です。MySQLのライブラリ、libmysqlclient_r.soの設置されているディレクトリを指定します。

--with-mysql-lib-dir
$ ./configure --enable-mysql-cookie --with-mysql-header=/usr/include/mysql \
    --with-mysql-lib-dir=/usr/lib
      

Cookieシミュレート機能でmemcachedを使用する場合

--enable-memcache-cookie

Cookieシミュレート機能を使用する際、保存先をデフォルトのDBMでは無く、memcachedに保存するようにします。DefaultのDBMで良い場合や、Cookieシミュレート機能を使用しない場合は指定する必要はありません。別途memcachedを用意する必要があります。また、本オプションを指定した場合は、--with-apr-memcache-header、--with-apr-memcache-lib-dirも指定します。これはapr_memcacheのヘッダとライブラリが必要なことを意味します。

--enable-memcache-cookie
$ ./configure --enable-memcache-cookie \
    --with-apr-memcache-header=/usr/include/apr-memcache0 \
    --with-apr-memcache-lib-dir=/usr/lib
      

上記は、/usr/include/apr_memcache0以下にapr-memcache用のヘッダがあり、/usr/lib以下にlibapr_memcache.soがある場合の例です。

--with-apr-memcache-header

--enable-memcache-cookieを指定した場合は必須です。apr-memcacheのヘッダファイルの場所を指定します。

--with-apr-memcache-header
$ ./configure --enable-memcache-cookie \
    --with-apr-memcache-header=/usr/include/apr_memcache0 \
    --with-apr-memcache-lib-dir=/usr/lib
      

--with-apr-memcache-lib-dir

--enable-mysql-cookieを指定した場合は必須です。apr-memcacheのライブラリ、libapr_memcache.soの設置されているディレクトリを指定します。

--with-apr-memcache-lib-dir
$ ./configure --enable-memcache-cookie \
    --with-apr-memcache-header=/usr/include/apr_memcache0 \
    --with-apr-memcache-lib-dir=/usr/lib
      

Configuration

以下はmod_chxjが/usr/lib/apache2/modulesディレクトリ配下に設置されたものとしています

htmlファイルが変換対象の場合

例として、Locationが"/chxj"以下のものは全て変換する場合を説明します。

  1. httpd.confに以下を追加します。
    httpd.conf
    #====================================================================================
    # モジュールをApache2.0にロード
    #====================================================================================
    LoadModule chxj_module /usr/lib/apache2/modules/mod_chxj.so
    
    #====================================================================================
    # デバイスデータファイルの設定
    #====================================================================================
    ChxjLoadDeviceData  /etc/apache2/chxj/device_data.xml
    
    #====================================================================================
    # 絵文字データファイルの設定
    #====================================================================================
    ChxjLoadEmojiData   /etc/apache2/chxj/emoji.xml
    
    #====================================================================================
    # 変換エンジン動作指示命令
    # ChxjConvRule ==> ディレクティブ
    # "^/chxj.+$"  ==> Perl互換のURIパターン
    # EngineOn     ==> 変換エンジンを動作させる指示
    # NONE         ==> サーバ側の文字コード。(NONEを指定した場合は文字コード変換しない)
    #====================================================================================
    ChxjConvertRule "^/chxj.+$" "EngineOn" "NONE"
    
  2. apacheの再起動。

php等の出力結果が変換対象の場合

  1. httpd.confに以下を追加します
    httpd.conf
    #====================================================================================
    # モジュールをApache2.xにロード
    #====================================================================================
    LoadModule chxj_module /usr/lib/apache2/modules/mod_chxj.so
    
    #====================================================================================
    # デバイスデータの設定
    #====================================================================================
    ChxjLoadDeviceData  /etc/apache2/chxj/device_data.xml
    
    #====================================================================================
    # 絵文字データの設定
    #====================================================================================
    ChxjLoadEmojiData   /etc/apache2/chxj/emoji.xml
    
    #====================================================================================
    # 変換エンジン動作指示命令
    # ChxjConvRule ==> ディレクティブ
    # "^/chxj.+$"  ==> Perl互換のURIパターン
    # EngineOn     ==> 変換エンジンを動作させる指示。動作させたく無い場合は"EngineOff"
    # EUC-JP       ==> サーバ側の文字コード。(NONEを指定した場合は文字コード変換しない)
    #                  EUC-JPからCP932に文字コード変換します。
    #====================================================================================
    ChxjConvertRule "^/chxj.+$" "EngineOn" "EUC-JP"
    
  2. apacheの再起動。

xoopsを使用し、且つwordpress、bwikiを使用している場合

  1. httpd.confに以下を追加します
    httpd.conf
    #====================================================================================
    # モジュールをApache2.xにロード
    #====================================================================================
    LoadModule chxj_module /usr/lib/apache2/modules/mod_chxj.so
    
    #====================================================================================
    # デバイスデータの設定
    #====================================================================================
    ChxjLoadDeviceData  /etc/apache2/chxj/device_data.xml
    
    #====================================================================================
    # 絵文字データの設定
    #====================================================================================
    ChxjLoadEmojiData   /etc/apache2/chxj/emoji.xml
    
    #====================================================================================
    # 変換エンジン動作指示命令
    #====================================================================================
    #====================================================================================
    # bwikiの設定をします。bwikiではどうもxoopsヘッダの文字コードとbwiki内での携帯スキン
    # の文字コードが一致していないようなので、bwiki内で文字コードを変換させないように
    # 修正後、以下のルールを記述します。
    # 
    # ChxjConvRule           ディレクティブ
    # "^/modules/bwiki.+$"   このルールを適用したいURIパターン
    # "EngineOn"             変換エンジンを有効にします。
    # "EUC-JP"               出力時にEUC-JPからCP932に変換させます。
    # "PC"                   変換元HTMLはPCサイト用HTMLです。
    # "DoCoMo/1.0/D501i"     DoCoMo端末としてbwikiにアクセスさせます。
    #
    #====================================================================================
    ChxjConvertRule "^/modules/bwiki.+$" "EngineOn" "EUC-JP" "PC" \
        "DoCoMo/1.0/D501i"
    
    #====================================================================================
    # wordpressの設定をします。
    # 
    # ChxjConvRule               ディレクティブ
    # "^/modules/wordpress.+$"   このルールを適用したいURIパターン
    # "EngineOn"                 変換エンジンを有効にします。
    # "NONE"                     出力時に文字コード変換をさせません。
    # "NONE"                     変換元HTMLはPCサイト用HTMLではありません。
    # "DoCoMo/1.0/D501i"         DoCoMo端末としてwordpressにアクセスさせます。
    #
    #====================================================================================
    ChxjConvertRule "^/modules/wordpress/.*$" "EngineOn" "NONE" "PC" \
        "DoCoMo/1.0/D501i"
    
    #====================================================================================
    # その他の設定をします。
    # 
    # ChxjConvRule               ディレクティブ
    # "^/.+$"                    このルールを適用したいURIパターン
    # "EngineOn"                 変換エンジンを有効にします。
    # "EUC-JP"                   出力時にEUC-JPからCP932に文字コード変換をさせます。
    #
    #====================================================================================
    ChxjConvertRule "^/.+$" "EngineOn" "EUC-JP" 
    
    
    <Location />
      ChxjImageEngine On
      AllowOverride All
    </Location>
    
  2. apacheの再起動。

画像自動変換機能を使用する場合

  1. httpd.confに以下を追加します。下記は、URIが/imgで始まる全ての画像に対して動作するようmod_chxjに指示しています。

    httpd.conf
    <Location /img>
    ChxjImageEngine On
    ChxjImageCacheDir /tmp
    ChxjImageCopyright "A.Konno"
    ChxjImageCacheLimit 10485760
    </Location>
    

    上記の説明を以下に示します。

    1. ChxjImageEngine

      mod_chxjの画像変換ハンドラを起動するよう指示しています。DefaultはOff





    2. ChxjImageCacheDir

      mod_chxj画像変換ハンドラが使用する変換後の画像をおいておくディレクトリを指定します。デフォルトは/tmp。

      ChxjImageCacheDir
            ChxjImageCacheDir /tmp
            
      

      mod_chxjに画像変換キャッシュとして/tmpを使用するよう指示します。



    3. ChxjImageCacheLimit

      mod_chxj画像変換ハンドラが使用する変換後の画像をおいておくディレクトリの許容量を指定します。単位はbyte。

      ChxjImageCacheLimit
            ChxjImageCacheLimit 1024
            
      

      mod_chxjに画像変換キャッシュ最大サイズとして1kbyteと指定。※このとき変換結果が1kbyte以上あるような場合にはINTERNAL_SERVER_ERRORを返します。十分な領域を確保するか、画像サイズを小さくしてください。



    4. ChxjImageCopyright

      mod_chxjの画像変換ハンドラに、転送禁止設定を行うよう指示します。パラメータとして任意の文字列をとります。ChxjImageCopyrightディレクティブで指定された文字列は、それぞれのイメージのコメント部に埋め込まれます。

      ChxjImageCopyright
            ChxjImageCopyright "A.Konno"
            
      

      mod_chxjに転送禁止設定を行うよう指示しています。変換後イメージのコメント部分には、キャリア毎に以下の文字列を埋め込みます。

      AU の場合

      AU
             kddi_copyright=on,A.Konno
             
      

      DoCoMoの場合

      DoCoMo
      copy="NO",A.Konno
      

      SoftBank/Vodafoneの場合は、レスポンスヘッダに

      SoftBank/Vodafone/J-PHONE
               x-jphone-copyright:no-transfer
             
      

      を埋め込みます。(5)

  1. SoftBank/Vodafoneの場合は、リクエストURLの最後が.pnzか、.jpzで終わるようにダミーを付けなければなりません。

文字コードを変換したい場合

  1. httpd.confに以下を追加します。下記は、URIが/chxjで始まる全てのコンテンツに対して動作するようmod_chxjに指示しています。サーバ側はEUC-JPであった場合の例です。mod_chxjによってSJISに変換するように指示しています。サーバ側がShift_JISで無い場合は、Shift_JISコードの10進参照文字列表記を記述することによってShift_JISコードの絵文字2バイトコードに変換しクライアントへ返します。

    httpd.conf
    ChxjConvRule "^/chxj.+$" "EngineOn" "EUC-JP"
    

    上記の説明を以下に示します。

    1. ChxjConvertRule

      サーバサイドの文字コードを指定します。ここに、EUC-JPと指定してあった場合は、EUC-JPからCP932に変換後、クライアントに出力されます。省略した場合はNONE

      1. 変換エンジン動作指示命令

        ChxjConvertRule ==>ディレクティブ

        "^/chxj.+$" ==> Perl互換のURIパターン

        EngineOn ==>変換エンジンを動作させる指示。動作させたく無い場合は"EngineOff"

        EUC-JP ==>サーバ側の文字コード。(NONEを指定した場合は文字コード変換しない)



        EUC-JPからCP932に文字コード変換します。(glibc/iconvに依存します)





ディレクティブ

  1. ChxjLoadDeviceData

    デバイス定義ファイルを指定します。
    ex)
        ChxjLoadDeviceData /etc/apache2/device.xml
      
    
  2. ChxjLoadEmojiData

    絵文字変換定義ファイルを指定します。
    ex)
        ChxjLoadEmojiData   /etc/apache2/chxj/emoji.xml
      
    
  3. ChxjImageEngine

    画像変換エンジンを有効にします。パラメータとしてOnとOffを指定できます。DefaultはOffです。
    ex)
        ChxjImageEngine On
      
    
  4. ChxjImageCacheDir

    イメージの一時ファイル保存場所を指定します。
    ex)
        ChxjImageCacheDir   /tmp
      
    
  5. ChxjImageCacheLimit

    イメージの一時ファイル保存許容量を指定します。下記は1MByteの例。
    ex)
        ChxjImageCacheLimit   1048576
      
    
  6. ChxjImageCopyright

    イメージに著作権情報を付与します。
    ex)
        ChxjImageCopyright   "chosakuken jyoho"
      
    
  7. ChxjConvertRule

    HTML変換エンジンの適用ルールを記述します。本ディレクティブを使用し、変換エンジンのOn|Offを指定します。DefaultはOFFです。また、ルールは記述された順番に評価し、マッチするものがあれば、その時点で対象ルールを適用します。パラメータは3つ必要です。下記にパラメータを記します。
    パラメータ
    第1パラメータ URIを評価するPerl互換の正規表現を指定します
    第2パラメータ HTML変換エンジンのOn|Offを指定します。Onの場合は"EngineOn"。Offの場合は"EngineOff"を指定します。"EngineOn|EngineOff"の他に"CookieOn|CookieOff"を指定することもできます。複数指定する場合は","で区切って指定します。
    第3パラメータ 文字コードを指定します。ここで指定した文字コードから"CP932"に変換します。指定できる文字コードはiconv -lコマンドによって確認することができます。変換しなくて良い場合はNONEを指定してください。
    第4パラメータ 省略した場合は、携帯ページからの変換を意味します。PC用ページからの変換を行う場合は"PC"を第四パラメータに指定します。
    第5パラメータ サーバサイドアプリケーションに渡すUser-Agentを指定します。例えば、wordpress等のようにCHTMLを出力するアプリケーションがある場合は、"DoCoMo/1.0/N501i"等適当なUser-Agentを指定することによって、アプリケーションにCHTMLを出力するように指示することができます。ここで指定したUser-AgentはHTML出力時には評価されません。
    ex)
        ChxjConvertRule "^/chxj.+$/" EngineOn EUC-JP
      
    
  8. ChxjCookieDir

    クッキー保存先をdbmにする場合(デフォルト)指定します。クッキーの内容を保存するディレクトリを指定します。指定しない場合は/tmpに保存されます。

    ex)
        <Location />
          ChxjCookieDir   /tmp
        </Location>
      
    

    詳細は「Cookieシミュレート機能」の項を参照ください。

  9. ChxjCookieTimeout

    クッキーを使用する場合に指定します。クッキーの保持期間を秒単位で指定します。指定しない場合は、1800秒でクッキーデータを破棄します。

    ex)
        <Location />
          ChxjCookieTimeout 10
        </Location>
      
    

    詳細は「Cookieシミュレート機能」の項を参照ください。

  10. ChxjCookieStoreType

    クッキー保存先を指定します。指定できるものは以下のとおり。
    保存先
    意味 指定例
    "dbm" dbmを選択します。 ChxjCookieStoreType "dbm"
    "mysql" mysqlを選択します。有効にするにはconfigure時にMYSQL COOKIE機能を有効にする必要があります ChxjCookieStoreType "mysql"
    "memcache" memcacheを選択します。有効にするにはconfigure時にMEMCACHE COOKIE機能を有効にする必要があります ChxjCookieStoreType "memcache"
  11. ChxjCookieMysqlHost

    MySQLサーバの動作するホストを指定します。

    ChxjCookieMysqlHostの例
             ChxjCookieMysqlHost "localhost"
          
    

    詳細は「Cookieシミュレート機能」の項を参照ください。

  12. ChxjCookieMysqlPort

    MySQLサーバのポート番号を指定します。

    ChxjCookieMysqlPortの例
             ChxjCookieMysqlPort 3306
          
    

    詳細は「Cookieシミュレート機能」の項を参照ください。

  13. ChxjCookieMysqlDatabase

    MySQLサーバのデータベース名を指定します。

    ChxjCookieMysqlDatabaseの例
             ChxjCookieMysqlDatabase "test_db"
          
    

    詳細は「Cookieシミュレート機能」の項を参照ください。

  14. ChxjCookieMysqlUsername

    MySQLサーバに接続する際に使用するユーザ名を指定します。

    ChxjCookieMysqlUsernameの例
             ChxjCookieMysqlUsername "roottest"
          
    

    詳細は「Cookieシミュレート機能」の項を参照ください。

  15. ChxjCookieMysqlPassword

    MySQLサーバに接続する際に使用するパスワードを指定します。

    ChxjCookieMysqlPasswordの例
             ChxjCookieMysqlPassword "pwtest"
          
    

    詳細は「Cookieシミュレート機能」の項を参照ください。

  16. ChxjCookieMysqlSocketPath

    MySQLのソケットパスを指定します。

    ChxjCookieMysqlSocketPathの例
             ChxjCookieMysqlSocketPath  "/tmp/mysql.sock"
          
    

    詳細は「Cookieシミュレート機能」の項を参照ください。

  17. ChxjCookieMysqlCharset

    MySQLのエンコードを指定します。

    ChxjCookieMysqlCharsetの例
             ChxjCookieMysqlCharset  "utf8"
          
    

    詳細は「Cookieシミュレート機能」の項を参照ください。

  18. ChxjCookieMysqlTablename

    MySQLのクッキーを保存するテーブル名を指定します。

    ChxjCookieMysqlTablenameの例
             ChxjCookieMysqlTablename  "chxj_cookie"
          
    

    上記のように"chxj_cookie"と指定すると、実際に作成されるテーブルは、chxj_cookieとchxj_cookie_expireテーブルの2つになります。詳細は「Cookieシミュレート機能」の項を参照ください。

  19. ChxjCookieMemcacheHost

    memcachedの動作するホストを指定します。

    ChxjCookieMemcacheHostの例
             ChxjCookieMemcacheHost "localhost"
          
    

    詳細は「Cookieシミュレート機能」の項を参照ください。

  20. ChxjCookieMemcachePort

    memcachedのポート番号を指定します。

    ChxjCookieMemcachePortの例
             ChxjCookieMemcachePort 11211
          
    

    詳細は「Cookieシミュレート機能」の項を参照ください。

対応するCHTMLタグ

変換可能なCHTMLタグは以下のとおりです。

対応タグ一覧
タグ 属性 CHTML HDML XHTML JHTML 備考
<HTML> 属性を指定した場合は無視します
<META> http-equiv × CHTML1.0、HDMLでは無視します
content × CHTML1.0、HDMLでは無視します
<HEAD> 属性を指定した場合は無視します
<TITLE> 属性を指定した場合は無視します
<BASE> × HDMLでは無視します
<BODY> bgcolor × HDML、CHTML1.0、CHTML2.0では無視します
text × HDML、CHTML1.0、CHTML2.0では無視します
link × HDML、CHTML1.0、CHTML2.0では無視します
<A> href
accesskey
<BR>
<FONT> color × HDML,CHTML1.0では無視します
<FORM> action
method × HDMLでは無視します
<INPUT> name (11)
type text,password,hidden,radio,checkbox,submitに対応
value
istyle
<SELECT> name
size × HDMLでは無視します
<OPTION> value (7)
checked
<DIV> align
<HR>
<CENTER>
<IMG> src
<DL>   ×
<DT>   (13)
<DD>   (14)
<CHXJ:IF> lang lang="chtml" lang="xhtml" lang="hdml" lang="jhtml"が指定できます
  1. SoftBankの予約クエリ名は内部で変換するので指定しても良い
  2. 必ず閉じてください。そのうち対応します。
  3. 必ず閉じてください。そのうち対応します。
  4. 必ず閉じてください。そのうち対応します。

独自拡張タグ

  1. <CHXJ:IF>

    <CHXJ:IF>タグと</CHXJ:IF>タグではさまれたタグやテキストは、変換せずにそのまま(15)出力します。必須の属性としてlangがあります。lang属性を指定することによって、例えば、「HDML機の場合のみ出力させる」といったことを可能にします。



    ex)

    HTML文書中にHDML機の場合のみ有効にしたいタグ、または文書がある場合
           <CHXJ:IF lang="HDML" >
             <NODISPLAY>
    <ACTION TYPE=ACCEPT TASK=GOSUB \
        DEST='device:data/dnld?url=abc&name=abc.jpg&size=100&disposition=devjaww&title=test'> \
             </NODISPLAY>
           </CHXJ:IF>
           
    



    ex)

    i-Modeのみ出力したい文書がある場合
           <CHXJ:IF lang="chtml" >
             シークレットコードがどーのこーの。
           </CHXJ:IF>
           
    



    また、lang属性は、複数指定することも可能です。

    HDML機,J-PHONE機は以下を出力します
           <CHXJ:IF lang="chtml" lang="jhtml">
           あなたの携帯は、HDML機かJ-HTML機です。
           </CHXJ:IF>
           
    



  1. 変換しませんので注意が必要です

文字コードについて

サーバサイドコンテンツについてはShift_JIS(CP932)、EUCJP-WIN(Win外字対応のEUCJP)、UTF-8のどれかで記述することが可能です。Shift_JISで記述した場合は絵文字についてもShift_JISで、EUCJP-WINで記述した場合は絵文字についてもEUCJP-WINで、UTF-8で記述した場合は絵文字についてもUTF-8で記述します。(16)クライアントサイド(端末側)に送信する文字コードはShift_JISまたはUTF-8を指定することが可能です。(17)mod_chxjによりサーバサイドコンテンツの文字コードから端末に送信する文字コードへと絵文字も含めて変換します。POST/GET中のデータについても端末側文字コードからサーバサイドコンテンツの文字コードへと絵文字も含めて変換します。

  1. 注意: Shift_JISでサーバサイドコンテンツを記述した場合はPOST/GETデータもShift_JISでサーバサイドコンテンツに渡されます。
  2. 注意: EUCJP-WINでサーバサイドコンテンツを記述した場合はPOST/GETデータもEUCJP-WINでサーバサイドコンテンツに渡されます。
  3. 注意: UTF-8でサーバサイドコンテンツを記述した場合はPOST/GETデータもUTF-8でサーバサイドコンテンツに渡されます。
  4. 注意:本変換機能は1.0.0以降から

サーバサイドコンテンツの文字コードはChxjConvRuleディレクティブで指定した文字コードになります。ChxjConvRuleにて矛盾が生じない限り、文字コードの混在も可能です。

  1. 詳細は「絵文字について」の項を参照のこと
  2. 指定方法については「デバイス定義」の項を参照のこと。

絵文字について

i-Mode用の絵文字を書いておけば、アクセスしたキャリアによって、mod_chxjが対応の絵文字に自動変換します。ソースに2byteのバイナリコードを直接書いても、10進参照文字列(&#XXX;の形)、16進参照文字列(&#xXXX;の形)で書いても、変換対象になります。10進参照文字列、16進参照文字列はmod_chxjにより自動で2バイトコードに変換されます。(18)

  1. コンテンツをSJISで記述する場合には絵文字もSJISで、コンテンツをEUCJP-WINで記述する場合には絵文字もEUCJP-WINで、UTF-8で記述する場合には絵文字もUTF-8で記述する必要があります

絵文字変換定義

絵文字の変換に関する動作を変えたい場合(例えば「ハートがあったら、AUの場合はスペードに」とか、「変換定義がおかしい」といった場合)は、emoji.xmlファイルを直接編集することによって定義を変更することが可能です。emoji.xmlはXMLファイルとなっていますので、人によってはvi等で簡単に定義を変更することができるかもしれません。

emoji.xmlは3つのパートに分かれています。1つ目はDoCoMo→DoCoMo/au/SoftBankの変換定義部。2つ目はau→DoCoMoの変換定義部。3つ目はSoftBank→DoCoMoの変換定義部。1つ目はサーバサイドコンテンから各キャリアの絵文字に変換する際に使用されます。2つ目と3つ目はPOST/GETデータの変換に使用されます。



DoCoMo→DoCoMo/au/SoftBank変換定義

以下に、emoji.xmlファイルの1つ目のパート、DoCoMo→DoCoMo/au/SoftBankの変換定義部を記します。

emoji.xml
<emoji>
  <set>
    <no>1</no>
    <imode>
      <sjis-hex>f89f</sjis-hex>
      <sjis-dec>63647</sjis-dec>
      <eucjp-hex>8ffca1</eucjp-hex>
      <eucjp-dec>9436321</eucjp-dec>
      <unicode-hex>e63e</unicode-hex>
      <unicode-dec>58942</unicode-dec>
      <utf8-hex>ee98be</utf8-hex>
      <utf8-dec>15636670</utf-dec>
      <description>晴れ</description>
    </imode>
    <ezweb>
      <A>
        <no>44</no>
        <sjis-hex>f660</sjis-hex>
        <sjis-dec>63072</sjis-dec>
        <unicode-hex>e488</unicode-hex>
        <unicode-dec>58504</unicode-dec>
        <utf8-hex>eebda0</utf8-hex>
        <utf8-dec>15646112</utf-dec>
      </A>
      <B>
        <no>44</no>
        <sjis-hex>f660</sjis-hex>
        <sjis-dec>63072</sjis-dec>
        <unicode-hex>e488</unicode-hex>
        <unicode-dec>58504</unicode-dec>
        <utf8-hex>eebda0</utf8-hex>
        <utf8-dec>15646112</utf-dec>
      </B>
      <C>
        <no>44</no>
        <sjis-hex>f660</sjis-hex>
        <sjis-dec>63072</sjis-dec>
        <unicode-hex>e488</unicode-hex>
        <unicode-dec>58504</unicode-dec>
        <utf8-hex>eebda0</utf8-hex>
        <utf8-dec>15646112</utf-dec>
      </C>
      <D>
        <no>44</no>
        <sjis-hex>f660</sjis-hex>
        <sjis-dec>63072</sjis-dec>
        <unicode-hex>e488</unicode-hex>
        <unicode-dec>58504</unicode-dec>
        <utf8-hex>eebda0</utf8-hex>
        <utf8-dec>15646112</utf-dec>
      </D>
    </ezweb>
    <softbank>
      <no>74</no>
      <sjis-hex>476a</sjis-hex>
      <sjis-dec>116572776975</sjis-dec>
      <unicode-hex>e04a</unicode-hex>
      <unicode-dec>57418</unicode-dec>
      <utf8-hex>ee818a</utf8-hex>
      <utf8-dec>15630730</utf-dec>
    </softbank>
  </set>
     ・
     ・
     ・
     ・
</emoji>

絵文字の定義は、<emoji>タグから</emoji>タグまでの間にあります。その中の要素を説明します。1つの絵文字につき、1つのセット(<set>タグから</set>タグまで)とし、キャリア毎の絵文字を定義しています。合計176セットあります。

  1. <imode>要素

    まず、元となるi-Mode用の絵文字は、<imode>タグにはさまれた間に定義されています。<imode>要素は子にsjis、eucjp、utf8、unicodeのそれぞれ16進と10進表記データを保持します。sjis-hexはShift_JISコードの16進表記、sjis-decはShift_JISコードの10進表記、eucjp-hexはEUCJP-WINの16進表記、eucjp-decはEUCJP-WINの10進表記、utf8-hexはUTF-8の16進表記、utf8-decはUTF-8の10進表記、unicode-hexはUNICODEの16進表記、unicode-decはUNICODEの10進表記となります。サーバサイドコンテンツがSJISで記述されている場合はimode要素のsjis-hex、sjis-decを参照します。同様にがEUCJP-WINで記述されている場合はimode要素のeucjp-hex、eucjp-decを参照します。UTF-8で記述されている場合はimode要素のutf8-hex、utf8-decを参照します。

    サーバサイドコンテンツのマッチするコードがimode要素の中に存在すれば、変換は同一set内のデータを使用して行われます。



  2. <ezweb>要素

    アクセスしてきた端末が、AU機であった場合、<ezweb>要素に定義されている値に変換します。<ezweb>要素は、<A>〜<D>要素を持っていて、それぞれAUの絵文字タイプA〜Dに対応していますので、もし、Dタイプの絵文字端末であったなら、<D>要素の<no>に定義されている値に変換します。ここで定義されている値は、HDML機の場合は、<IMG ICON="XX">の"XX"の部分に当てはめられて、置換されます。XHTML機の場合は、<IMG LOCALSRC="XX">の"XX"の部分に当てはめられて、置換されます。同要素にはsjis-hex、sjis-dec、unicode-hex、unicode-dec、utf8-hex、utf8-decが有りますが、今のところ使用していません。



  3. <softbank>要素

    アクセスしてきた端末が、SoftBank/Vodafone/J-Phone端末であった場合、<softbank>要素に定義されている値に変換します。<softbank>要素は、上記要素と同様にsjis-hex、sjis-dec、unicode-hex、unicode-dec、utf8-hex、utf8-decを保持しています。アクセスしてきた端末にはsjisを返す場合はsjis-hex、sjis-decの値を使用します。utf8を返す場合にはutf8-hex、utf8-decでは無くunicode-hex、unicode-decを返します。SoftBank端末の場合は3G端末は基本的にUTF8を返すようにデバイス定義にて定義されています。UTF8で定義された場合でSoftBankの場合はUNICODEの参照文字列を返すようになっています。(問題回避のため)



emoji.xmlに定義されていない絵文字で、変換したい絵文字がある場合には、このファイルに新たな定義を足せば、変換するようになります。(19)

  1. 同一コード領域に割り当てる必要があるかもしれません

au→DoCoMo変換定義

au->DoCoMo変換の定義は主にau端末からサーバサイドへのPOST/GETデータの変換に使用されます。定義はemoji.xmlファイルの<ezweb2imode>タグではさまれたところに定義してあります。<set>から</set>までの間が1絵文字を表現する部分になります。

以下に、emoji.xmlファイルの2つ目のパート、au→DoCoMo変換定義を以下に記します。

emoji.xml
<ezweb2imode>
  <set>
    <no>1</no>
    <ezweb>
      <sjis-hex>F659</sjis-hex>
      <utf8-hex>eebd99</utf8-hex>
    </ezweb>
    <imode>
      <no>220</no>
    </imode>
  </set>
   ・
   ・
   ・
</ezweb2imode>



  1. <no>要素

    auで定義されている絵文字番号を保持します。



  2. <ezweb>要素

    <no>で定義された絵文字番号の実際にPOST/GETされてくる値を保持します。sjis-hexは端末がShift_JISの場合のPOST/GETデータ、utf8-hexは端末がUTF-8の場合のPOST/GETデータになっています。POST/GETされたデータはこの要素に記述されたコードとマッチングされ、マッチした場合絵文字を特定します。



  3. <imode>要素

    <ezweb>要素でマッチした場合に参照されるEzWeb絵文字に対応するDoCoMo絵文字番号を保持します。mod_chxjによりDoCoMo絵文字に変換する場合に使用されます。



SoftBank→DoCoMo変換定義

SoftBank->DoCoMo変換の定義は主にSoftBank端末からサーバサイドへのPOST/GETデータの変換に使用されます。定義はemoji.xmlファイルの<softbank2imode>タグではさまれたところに定義してあります。<set>から</set>までの間が1絵文字を表現する部分になります。

以下に、emoji.xmlファイルの3つ目のパート、SoftBank→DoCoMo変換定義を以下に記します。

emoji.xml
<softbank2imode>
  <set>
    <no>
      1
    </no>
    <softbank>
      <webcode>
        4721
      </webcode>
      <sjis-hex>
        f941
      </sjis-hex>
      <utf8-hex>
        ee8081
      </utf8-hex>
    </softbank>
    <imode>
      <no>
        140
      </no>
    </imode>
  </set>
   ・
   ・
   ・
   ・
</softbank2imode>



  1. <no>要素

    SoftBankで定義されている絵文字番号を保持します。



  2. <softbank>要素

    <no>で定義された絵文字番号の実際にPOST/GETされてくる値を保持します。webcodeは端末がShift_JISの場合でウェブコードを送信してくる場合のPOST/GETデータ、sjis-hexは端末がShift_JISの場合のPOST/GETデータ、utf8-hexは端末がUTF-8の場合のPOST/GETデータになっています。POST/GETされたデータはこの要素に記述されたコードとマッチングされ、マッチした場合絵文字を特定します。



  3. <imode>要素

    <ezweb>要素でマッチした場合に参照されるSoftBank絵文字に対応するDoCoMo絵文字番号を保持します。mod_chxjによりDoCoMo絵文字に変換する場合に使用されます。







デバイス定義 device_data.xml

mod_chxjの動作を決定付ける重要な定義です。変換対象の端末は全て、device_data.xmlファイルに定義される必要があります。定義されていない端末は、mod_chxjとしては、認識することができません。認識できない場合には、変換せずにそのまま出力します。ただし、Perl互換の正規表現によって定義できるため、正規表現の書き方によっては全ての機種に対応させることも可能です。



デバイス定義の要素

まず以下にデバイス定義を記します。

device_data.xml
<devices>
  <user_agent pattern="^KDDI-([^     ]+) UP.Browser/[^   ]+ .+">
    <device>
      <device_id>HI21</device_id>
      <device_name>C3001H</device_name>
      <html_spec_type>XHTML_MOBILE_1_0</html_spec_type>
      <width>120</width>
      <heigh>130</heigh>
      <gif>true</gif>
      <jpeg>true</jpeg>
      <png>true</png>
      <bmp2>false</bmp2>
      <bmp4>false</bmp4>
      <color>4096</color>
      <emoji_type>C</emoji_type>
      <wp_width>120</wp_width>
      <wp_heigh>116</wp_heigh>
      <cache>9740</cache>
      <dpi_width>72</dpi_width>
      <dpi_heigh>72</dpi_heigh>
      <charset>SJIS</charset>
    </device>
    ・
    ・
    ・
  </user_agent>
  <user_agent>
    ・
    ・
    ・
  </user_agent>
    ・
    ・
    ・
</devices>

デバイス定義は<devices>タグに囲まれた中に記述します。devicesタグはuser_agentタグを子に持ちます。user_agentはpattern属性を保持し、端末のUser-Agentヘッダとマッチングされます。user_agentタグのpattern属性とマッチした場合には、そのuser_agentタグの子ノードであるdevice要素を1つづつ見に行きます。user_agentタグのpattern属性は正規表現となっていて、$1がデバイス識別IDになるように定義されていますので、$1とdevice_idタグの要素をマッチングします。マッチしたdeviceを該当端末とし、mod_chxjは該当端末用の変換処理を行います。



以下に各タグについての説明を記します。

  1. devicesタグ

    全ての要素は一組のdevicesタグに囲まれます。この中に存在する要素がデバイス定義になります。



  2. user_agentタグ

    User-Agentのパターンとそのパターンにマッチするdeviceを子ノードに持ちます。

    pattern属性にはUser-AgentとマッチさせるPerl互換の正規表現を指定します

    仮に"KDDI-CA31 UP.Browser/・・・"というUser-Agentを保持する端末からのアクセスがあった場合は、<user_agent pattern="^KDDI-([^ ]+) UP.Browser/[^ ]+ .+">にマッチしますが、<user_agent pattern="^UP.Browser/[^\-]+-([^ ]+) .+" >にはマッチしません。よってmod_chxjは<user_agent pattern="^KDDI-([^ ]+) UP.Browser/[^ ]+ .+">の子ノードを処理対象と判断します。

    pattern属性の要素である正規表現には必ず$1で後方参照できるようグルーピングが必要です。$1で後方参照する値は以下に記すdevice_idタグの値と比較されます。device_idとの比較の結果、等しい値であればそのdevice_idを保持するdeviceタグが該当端末として選択されます。

    user_agentタグレベルではマッチしているもののdevice_idが期待する値を持っていない場合は、user_agentタグ中の最後のdeviceが選択されます。



  3. deviceタグ

    一台の端末を表現します。

    子ノードとして以下を保持します。

    1. device_id
    2. device_name
    3. html_spec_type
    4. width
    5. height
    6. gif
    7. jpeg
    8. png
    9. bmp2
    10. bmp4
    11. color
    12. emoji_type
    13. wp_width
    14. wp_height
    15. cache
    16. dpi_width
    17. dpi_height
    18. charset





  4. device_idタグ

    user_agentタグのpattern属性により生成された$1により後方参照される値と比較される値を保持します。通常DoCoMoであればUser-Agentの「機種名」部、auであればUser-Agentの「デバイスID」部、SoftBankであれば、User-Agentの「機種名」部を記述します。
          <!-- DoCoMo F905iの場合 -->
          <device_id>F905i</device_id>
    
          <!-- au W54Tの場合 -->
          <device_id>TS3E</device_id>
    
          <!-- SoftBank 822SHの場合 -->
          <device_id>822SH</device_id>
        
    
  5. device_nameタグ

    mod_chxjでは本値をデバッグログ出力時にのみ使用します、人が見てわかりやすい名前を入力しておきます。device_idと混同しないように注意します。
    au W21CAの例
          <device_name>W21CA</device_name>
        
    
  6. html_spec_typeタグ

    端末のサポートするHTMLタイプを指定します。本タグの値によりHTML変換結果が変わります。指定できる値は以下のとおりです。大文字、小文字は区別しません。
    対応HTMLタイプ一覧
    意味
    CHTML_1_0 CHTML1.0対応機種の場合記述します。HTML変換結果はCHTML1.0になります。
    CHTML_2_0 CHTML2.0対応機種の場合記述します。HTML変換結果はCHTML2.0になります。
    CHTML_3_0 CHTML3.0対応機種の場合記述します。HTML変換結果はCHTML3.0になります。
    CHTML_4_0 CHTML4.0対応機種の場合記述します。HTML変換結果はCHTML4.0になります。(0.9.0時点ではCHTML3.0と同じ)
    CHTML_5_0 CHTML5.0対応機種の場合記述します。HTML変換結果はCHTML5.0になります。(0.9.0時点ではCHTML3.0と同じ)
    CHTML_6_0 CHTML6.0対応機種の場合記述します。HTML変換結果はCHTML6.0になります。(0.9.0時点ではCHTML3.0と同じ)
    CHTML_7_0 CHTML7.0対応機種の場合記述します。HTML変換結果はCHTML7.0になります。(0.9.0時点ではCHTML3.0と同じ)
    XHTML_MOBILE_1_0 auのXHTML対応機種の場合に記述します。HTML変換結果はXHTMLになります。
    HDML auのHDML対応機種の場合に記述します。HTML変換結果はHDMLになります。
    JHTML SoftBankの端末の場合に記述します。HTML変換結果はSoftBank用HTMLになります。
  7. widthタグ

    端末の横幅を指定します。
  8. heightタグ

    端末の縦幅を指定します。
  9. gifタグ

    端末がgif画像を表示することができる場合(サポートしている場合)はtrueを指定します。表示できない(サポートしていない)場合はfalseを指定します。(20)
  10. jpegタグ

    端末がjpeg画像を表示することができる場合(サポートしている場合)はtrueを指定します。表示できない(サポートしていない)場合はfalseを指定します。(21)
  11. pngタグ

    端末がpng画像を表示することができる場合(サポートしている場合)はtrueを指定します。表示できない(サポートしていない)場合はfalseを指定します。(22)
  12. bmp2タグ

    端末がbmp2画像を表示することができる場合(サポートしている場合)はtrueを指定します。表示できない(サポートしていない)場合はfalseを指定します。(23)通常はfalse。
  13. bmp4タグ

    端末がbmp4画像を表示することができる場合(サポートしている場合)はtrueを指定します。表示できない(サポートしていない)場合はfalseを指定します。(24)通常はfalse。
  14. colorタグ

    端末の表示可能色数。
  15. emoji_typeタグ

    auの場合に指定します。au以外の場合は指定しても意味はありません。

    設定できる値は以下のとおり。

    emoji_typeに設定できる値
    意味
    A 図柄タイプAをサポートしている場合に指定します。
    B 図柄タイプBをサポートしている場合に指定します。
    C 図柄タイプCをサポートしている場合に指定します。
    D 図柄タイプDをサポートしている場合に指定します。

    (25)

  16. wp_widthタグ

    壁紙の横幅を指定します。Mode=WPで画像生成する場合、この値が使用されます。
  17. wp_heightタグ

    壁紙の縦幅を指定します。Mode=WPで画像生成する場合、この値が使用されます。
  18. cacheタグ

    ブラウザのキャッシュサイズを指定します。
  19. dpi_widthタグ

    端末の解像度。
  20. dpi_heightタグ

    端末の解像度。
  21. charsetタグ(0.9.0にて追加)

    端末に送信する文字コードを指定します。指定できる値はSJISかUTF-8のみ。



  1. 大文字、小文字の区別なし
  2. 大文字、小文字の区別なし
  3. 大文字、小文字の区別なし
  4. 大文字、小文字の区別なし
  5. 大文字、小文字の区別なし
  6. 大文字、小文字の区別なし



イメージ画像変換機能

mod_chxjには、JPEG、GIF、PNG、BMPファイルを置いておくだけで、デバイス定義に従って、それぞれのキャリア対応のフォーマットに変換する機能があります。画像のサイズ(縦X横)も、端末の画面サイズに合わせて変換します。画像のサイズ(バイト数)については、デバイス定義中のキャッシュサイズを見て、その値よりも小さくなるように努力しますが、元の画像が大きすぎる場合や、複雑な画像の場合には、キャッシュサイズよりも小さくできずに表示できない場合があります。

それぞれのタグで指定する場合には、ファイル名の拡張子(.jpgや.gif等)をはずした形で指定します。

本機能には3つのモードが存在します。そのモードを以下に記します。

サムネイルモード

端末側画面サイズの約3分の1程度のサイズ(縦X横)に画像を縮小表示します。

サムネイルモード 使用例
  <IMG SRC="/img/logo?Mode=Thumbnail">
  

壁紙モード

端末側画面のサイズにマッチするサイズに拡大・縮小します。横長の画像の場合には、縦幅を合わせた後に左右をトリミングします。

壁紙モード 使用例
  <IMG SRC="/img/logo?Mode=WP">
  

EzGetモード

壁紙ダウンロードを行いたい場合に使用します。EzGETモードは、壁紙モードで出力される画像サイズと同一サイズの画像が使用されます。

EzGetモード 使用例
  <A HREF="/img/logo?Mode=EzGet">
  

その他の機能

モードの他に、画像サイズ(縦X横)を直接指定することも可能です。wパラメータ、hパラメータを使用して指定します。

  1. wパラメータ

    横幅を指定します。
  2. hパラメータ

    縦幅を指定します。
    w/hパラメータ 使用例
      <IMG SRC="/img/logo?w=100&h=200">
      
    
  3. User-Agentパラメータ(uaパラメータ)

    User-Agentを指定します。指定した場合は、リクエストヘッダ中のUser-Agentを本パラメータの値で上書きします。このパラメータに"IGN"を指定した場合は、User-Agentを無視します。Thumbnailモード、壁紙モードと併用時は、640x480を元に画像サイズを算出します。

上記全てのモード、パラメータはGETリクエストとしてのみ使用できます。

QRコード出力機能

QRコード出力ハンドラの登録

QRコード出力機能を使用するには、QRコードハンドラを登録します。httpd.confに以下の記述を追加します。

httpd.conf
  AddHandler chxj-qrcode .qrc

なお、ハンドラを登録しないでも、出力フィルターを経由させることで、QRコードを出力させることも可能です。(※QRコードの動的出力を参照)

QRコードソースファイルの設置

ハンドラを登録したら、その登録した拡張子を持つファイルを用意します。

例:a.qrc
  <?xml version=1.0 ?>
  
  <qrcode>
    <version>13</version>
    <level>H</level>
    <mode>8bit</mode>
    <size>1</size>
    <data>テストデータです</data>
  </qrcode>

.qrcファイルは、qrcode要素、version要素、level要素、mode要素、size要素、data要素から成り立ちます。

  1. versionタグversionタグは出力するQRコードの生成に利用するバージョンを指定します。使用できるバージョンは、1〜40までの40種類です。
  2. levelタグlevelタグは出力するQRコードの生成に利用する誤り検出レベルを指定します。 使用できるレベルは、L、Q、M、Hの4つです。
  3. modeタグmodeタグは出力するQRコードの生成に利用するモードを指定します。使用できるモードは、NUM(数字モード)ALPHA(英数字モード)8BIT(8ビットバイトモード)KANJI(漢字モード)です。
  4. sizeタグsizeタグは1モジュールを何ピクセルであらわすかを指定します。0を指定した場合は、4を指定した場合と同じ動作をします。 使用できるサイズは、0〜20までです。
  5. dataタグdataタグは、QRコードに出力するデータを指定します。改行した場合は、改行文字もQRコード内に符号化されます。

QRコードの動的出力機能

プログラム等を使用し、動的にQRコードを出力したい場合は、上記の.qrcファイルの内容をそのままOutputFilterに通してあげればOKです。つまり、ChxjConvertRuleディレクティブで"EngineOn"と指定したURIが指すディレクトリに設置すれば良いということです。mod_chxj内部で、Content-Typeがtext/xmlの場合、QRCode用のファイルであるかどうかを一度読み込んで判断するので、Content-Typeには、text/xmlを設定してください。

phpでQRコードを動的に出力する例
    <php
      $version = $_POST["version"];
      $level   = $_POST["level"];
      $mode    = $_POST["mode"];
      $size    = $_POST["size"];
      $data    = $_POST["data"];

      header("Content-Type: text/xml; charset=Shift_JIS");

      echo "<qrcode>\n";
      echo "<version>".$version."</version>\n";
      echo "<level>".$level."</level>\n";
      echo "<mode>".$mode."</mode>\n";
      echo "<size>".$size."</size>\n";
      echo "<data>".$data."</data>\n";
      echo "</qrcode>\n";
    >
  

そして、上記のコードを、mod_chxj変換エンジンが処理するはずであるところに設置すれば完了です。

Cookieシミュレート機能

Cookieシミュレート機能

Cookieを受け付けない(無視する)端末のためにCookieをシミュレートします。本機能を有効にするためにはChxjConvertRuleディレクティブを使用する必要があります。ChxjConvertRuleディレクティブの第2パラメータにCookieOnを指定します。

Cookieシミュレート機能を有効にする例
    ChxjConvertRule "^/chxj.+$" "EngineOn,CookieOn" "NONE"
  

One-Time ID

Cookieシミュレートでは、aタグ、imgタグ、formタグのURL部にOne-Time IDを埋め込むことで実現します。そのため、ユーザがブラウザの戻るボタン等で戻った場合はCookieを取得できなくなります。One-Time IDを使用する必要が無い場合、またはOne-Time IDを使用したくない場合には、CookieLazyModeを使用することで毎回同一IDを発行させることができます。

Cookieの保存場所

Cookieの内容はサーバ側に保存されます。保存先にはdbm、memcached、mysqlが選択できます。

注意) memcached、mysqlを保存先に選択する場合はconfigure時にそれぞれ指定する必要があります

保存先の指定にはChxjCookieStoreTypeディレクティブを使用します。

ChxjCookieStoreTypeでDBMを指定した例
    ChxjCookieStoreType "dbm"
  
ChxjCookieStoreTypeでMySQLを指定した例
    ChxjCookieStoreType "mysql"
  
ChxjCookieStoreTypeでmemcacheを指定した例
    ChxjCookieStoreType "memcache"
  

上記ChxjCookieStoreTypeが指定されない場合はdbmが選択されます。

dbmを使用する場合は、ChxjCookieDirディレクティブを指定し、保存ディレクトリを指定します。指定しなかった場合は/tmpに保存されます。

ChxjCookieDirの例
    ChxjCookieDir /var/abc
  

DBMの代わりにMySQLやmemcachedを指定することもできます。その際は、ChxjCookieDirは指定する必要はありません。MySQLを使用するには、configure時にMySQL COOKIE機能を有効にして、コンパイルする必要があります。(11)memcachedを使用するには、configure時にMEMCACHE COOKIE機能を有効にして、コンパイルする必要があります。(12)

MySQLを使用する場合にはChxjCookieStoreTypeディレクティブのほかに、以下のディレクティブを指定する必要もあります。

  1. ChxjCookieMysqlHost

    MySQLサーバの動作するホストを指定します。
    ChxjCookieMysqlHostの例
             ChxjCookieMysqlHost "localhost"
          
    
  2. ChxjCookieMysqlPort

    MySQLサーバのポート番号を指定します。
    ChxjCookieMysqlPortの例
             ChxjCookieMysqlPort 3306
          
    
  3. ChxjCookieMysqlDatabase

    MySQLサーバのデータベース名を指定します。
    ChxjCookieMysqlDatabaseの例
             ChxjCookieMysqlDatabase "test_db"
          
    
  4. ChxjCookieMysqlUsername

    MySQLサーバに接続する際に使用するユーザ名を指定します。
    ChxjCookieMysqlUsernameの例
             ChxjCookieMysqlUsername "roottest"
          
    
  5. ChxjCookieMysqlPassword

    MySQLサーバに接続する際に使用するパスワードを指定します。
    ChxjCookieMysqlPasswordの例
             ChxjCookieMysqlPassword "pwtest"
          
    
  6. ChxjCookieMysqlSocketPath

    MySQLのソケットパスを指定します。
    ChxjCookieMysqlSocketPathの例
             ChxjCookieMysqlSocketPath  "/tmp/mysql.sock"
          
    
  7. ChxjCookieMysqlCharset

    MySQLのエンコードを指定します。
    ChxjCookieMysqlCharsetの例
             ChxjCookieMysqlCharset  "utf8"
          
    
  8. ChxjCookieMysqlTablename

    MySQLのクッキーを保存するテーブル名を指定します。

    ChxjCookieMysqlTablenameの例
             ChxjCookieMysqlTablename  "chxj_cookie"
          
    

    上記のように"chxj_cookie"と指定すると、実際に作成されるテーブルは、chxj_cookieとchxj_cookie_expireテーブルの2つになります。

memcachedを使用する場合にはChxjCookieStoreTypeディレクティブの他に以下のディレクティブを指定する必要もあります。

  1. ChxjCookieMemcacheHost

    memcachedの動作するホストを指定します。
    ChxjCookieMemcacheHostの例
             ChxjCookieMemcacheHost "localhost"
          
    
  2. ChxjCookieMemcachePort

    memcachedのポート番号を指定します。
    ChxjCookieMemcachePortの例
             ChxjCookieMemcachePort 11211
          
    
  1. Buildの項参照
  2. Buildの項参照

Cookieの保持期間

ChxjCookieTimeoutディレクティブで保持期間を指定することができます。指定しなかった場合は1800秒でサーバに保存されているCookieは削除されます。

ChxjCookieTimeoutの例
    <Location />
      ChxjCookieTimeout 10
    </Location>
  

上記の例は、10秒でタイムアウト(サーバから削除)するように指定しています。

CookieLazyMode

ChxjCookieLazyModeディレクティブで"true"を指定するとOne-Time IDを使用しないようにすることができます。Cookie用のIDは毎回同一のIDが割り振られます。以下にCookieLazyModeの例を記します。

ChxjCookieLazyModeの例
  ChxjCookieLazyMode true

true以外を指定すると通常のOne-Time IDモードになります。

Refererシミュレート機能(EXPERIMENTAL)

Refererシミュレート機能(EXPERIMENTAL)

DoCoMo端末などのRefererに対応していない機種のためにRefererシミュレート機能を提供します。本機能は、Cookieシミュレート機能を有効にすると、自動で有効になります(将来的には変更予定)。