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の場合は、リクエストＵＲＬの最後が.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で記述する必要があります

### 絵文字変換定義

絵文字の変換に関する動作を変えたい場合（例えば「ハートがあったら、ＡＵの場合はスペードに」とか、「変換定義がおかしい」といった場合）は、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の絵文字タイプＡ〜Ｄに対応していますので、もし、Ｄタイプの絵文字端末であったなら、<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ファイルを置いておくだけで、デバイス定義に従って、それぞれのキャリア対応のフォーマットに変換する機能があります。画像のサイズ（縦Ｘ横）も、端末の画面サイズに合わせて変換します。画像のサイズ（バイト数）については、デバイス定義中のキャッシュサイズを見て、その値よりも小さくなるように努力しますが、元の画像が大きすぎる場合や、複雑な画像の場合には、キャッシュサイズよりも小さくできずに表示できない場合があります。
それぞれのタグで指定する場合には、ファイル名の拡張子（.jpgや.gif等）をはずした形で指定します。
本機能には３つのモードが存在します。そのモードを以下に記します。

### サムネイルモード

端末側画面サイズの約３分の１程度のサイズ（縦Ｘ横）に画像を縮小表示します。

サムネイルモード 使用例

      <IMG SRC="/img/logo?Mode=Thumbnail">

### 壁紙モード

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

壁紙モード 使用例

      <IMG SRC="/img/logo?Mode=WP">

### EzGetモード

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

EzGetモード 使用例

      <A HREF="/img/logo?Mode=EzGet">

### その他の機能

モードの他に、画像サイズ（縦Ｘ横）を直接指定することも可能です。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を元に画像サイズを算出します。

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

## ＱＲコード出力機能

### ＱＲコード出力ハンドラの登録

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

httpd.conf

      AddHandler chxj-qrcode .qrc

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

### ＱＲコードソースファイルの設置

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

例：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タグは出力するＱＲコードの生成に利用するバージョンを指定します。使用できるバージョンは、１〜４０までの４０種類です。
2. levelタグlevelタグは出力するＱＲコードの生成に利用する誤り検出レベルを指定します。　使用できるレベルは、L、Ｑ、Ｍ、Ｈの４つです。
3. modeタグmodeタグは出力するＱＲコードの生成に利用するモードを指定します。使用できるモードは、NUM（数字モード）ALPHA（英数字モード）8BIT（８ビットバイトモード）KANJI（漢字モード）です。
4. sizeタグsizeタグは１モジュールを何ピクセルであらわすかを指定します。０を指定した場合は、４を指定した場合と同じ動作をします。　使用できるサイズは、０〜２０までです。
5. dataタグdataタグは、ＱＲコードに出力するデータを指定します。改行した場合は、改行文字もＱＲコード内に符号化されます。

### ＱＲコードの動的出力機能

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

phpでＱＲコードを動的に出力する例

        <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をシミュレートします。本機能を有効にするためにはChxjConvertRuleディレクティブを使用する必要があります。ChxjConvertRuleディレクティブの第２パラメータに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)

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