<?xml version='1.0' encoding="EUC-JP" ?>

<doc xml:lang="ja">
<head>
  <title>mod_chxj</title>
  <subtitle></subtitle>
  <author>Atsushi Konno</author>
  <date>29 Mar 2005</date>
  <date>Last modified: @@DATE@@</date>
</head>
<body>
<section title="Overview">

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


</section>
<section title="インストール">
<subsection title="準備">
mod_chxjをインストールする前に、下記のものを用意する必要があります。
<ol>
  <li>Apache2.xのヘッダーファイル群</li>
  <li>Apache2.x用のapxs</li>
  <li>apr(Apache Portable Runtime)ライブラリとそのヘッダファイル郡(apu含む)</li>
  <li>automake、autoconf、libtool1.3.X</li>
  <li>ImageMagick(MagickWand)</li>
  <li>memcachedを使用する場合にはlibmemcached 0.20以降</li>
  <li>mysqlを使用する場合にはlibmysqlclient 4.1.11a以降</li>
  <li>Linux</li>
</ol>
</subsection>
<subsection title="mod_chxjの入手">
mod_chxjは<a href="http://sourceforge.jp/projects/modchxj/">こちら</a>からダウンロードすることができます。
</subsection>
<subsection title="インストール">
以下にmod_chxjインストール手順を示します。
<ol>
<li>Configure スクリプトを生成します<program title="Configure スクリプトの生成">
$ ./buildconf.sh
</program> 
<note>"$"はプロンプトをあらわします。</note>
</li>
<li>Configure

<program title="Configure">
$ ./configure
</program>
<note>場合によっては--with-apr-configや--with-apu-config、--with-pcre-configも必要です。</note>
<note>詳細はBuildを参照</note>
</li>
<li>mod_chxj.soを生成します
<program title="make">
$ make
</program>
</li>
<li>apacheにインストールします
<program title="install">
$ make install
</program>
</li>
<li>データの設置
etcディレクトリは以下のdevice_data.xmlとemoji.xmlをApache
からアクセスできるところに配置します。

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

<program title="データの設置">
$ mkdir -p /etc/apache2/chxj
$ cp etc/device_data.xml /etc/apache2/chxj
$ cp etc/emoji.xml /etc/apache2/chxj
</program>
</li>
</ol>
</subsection>
</section>
<section title="Build">
mod_chxjをコンパイルするにはconfigureを行う必要があります。
以下にconfigureのオプションを記します。
<subsection title="メイン">
  <subsection title="--with-apache-header">
      通常指定する必要はありません。configureでApacheのヘッダファイルの場所が検知できなかった場合や、任意のApacheヘッダファイルを使用したい場合に指定します。
      <program title="--with-apache-header">
         $ ./configure --with-apache-header=/usr/include/apache2
      </program>
      上記は/usr/include/apache2以下にApacheのヘッダファイルがある場合の例です。
  </subsection>
  <subsection title="--with-apxs">
      通常指定する必要はありません。configureでapxsを検知できなかった場合や、任意のapxsプログラムを指定したい場合に指定します。
      <program title="--with-apxs">
         $ ./configure --with-apxs=/usr/local/apache2/bin/apxs2
      </program>
      上記は/usr/local/apache2/bin/apxs2を使用するようにapxsに指定しています。
  </subsection>
  <subsection title="--with-apr-config">
      通常指定する必要はありません。
      configureでapr-configを検知できなかった場合や、任意のapr-configプログラムを指定したい場合に指定します。
      <program title="--with-apr-config">
         $ ./configure --with-apr-config=/usr/local/apache2/bin/apr-1-config
      </program>
      上記は/usr/local/apache2/bin/apr-1-configを使用するように指定しています。
  </subsection>
  <subsection title="--with-apu-config">
      通常指定する必要はありません。
      configureでapu-configを検知できなかった場合や、任意のapu-configプログラムを指定したい場合に指定します。
      <program title="--with-apu-config">
         $ ./configure --with-apu-config=/usr/local/apache2/bin/apu-1-config
      </program>
      上記は/usr/local/apache2/bin/apu-1-configを使用するように指定しています。
  </subsection>
</subsection>
<subsection title="Cookieシミュレート機能でMySQLを使用する場合">
  <subsection title="--enable-mysql-cookie">
      Cookieシミュレート機能を使用する際、保存先をデフォルトのDBMでは無く、MySQLに保存するようにします。
      DefaultのDBMで良い場合や、Cookieシミュレート機能を使用しない場合は指定する必要はありません。
      別途MySQLサーバを用意する必要があります。また、本オプションを指定した場合は、--with-mysql-header、--with-mysql-lib-dirも指定します。
      これはMySQLのヘッダとライブラリが必要なことを意味します。使用するMySQLのライブラリは今のところlibmysqlclient_r.soのみです。
      <program title="--enable-mysql-cookie">
         $ ./configure --enable-mysql-cookie --with-mysql-header=/usr/include/mysql  --with-mysql-lib-dir=/usr/lib
      </program>
      上記は、/usr/include/mysql以下にmysql用のヘッダがあり、/usr/lib以下にlibmysqlclient_r.soがある場合の例です。
  </subsection>
  <subsection title="--with-mysql-header">
      --enable-mysql-cookieを指定した場合は必須です。
      MySQLのヘッダファイルの場所を指定します。
      <program title="--with-mysql-header">
         $ ./configure --enable-mysql-cookie --with-mysql-header=/usr/include/mysql  --with-mysql-lib-dir=/usr/lib
      </program>
  </subsection>
  <subsection title="--with-mysql-lib-dir">
      --enable-mysql-cookieを指定した場合は必須です。
      MySQLのライブラリ、libmysqlclient_r.soの設置されているディレクトリを指定します。
      <program title="--with-mysql-lib-dir">
         $ ./configure --enable-mysql-cookie --with-mysql-header=/usr/include/mysql  --with-mysql-lib-dir=/usr/lib
      </program>
  </subsection>
</subsection>
<subsection title="Cookieシミュレート機能でmemcachedを使用する場合">
  <subsection title="--enable-memcache-cookie">
      Cookieシミュレート機能を使用する際、保存先をデフォルトのDBMでは無く、memcachedに保存するようにします。
      DefaultのDBMで良い場合や、Cookieシミュレート機能を使用しない場合は指定する必要はありません。
      別途memcachedを用意する必要があります。また、本オプションを指定した場合は、--with-memcached-header、--with-memcached-lib-dirも指定します。
      これはlibmemcachedのヘッダとライブラリが必要なことを意味します。
      <program title="--enable-memcache-cookie">
         $ ./configure --enable-memcache-cookie --with-memcached-header=/usr/include/libmemcached --with-memcached-lib-dir=/usr/lib
      </program>
      上記は、/usr/include/libmemcached以下にlibmemcached用のヘッダがあり、/usr/lib以下にlibmemcached.soがある場合の例です。
  </subsection>
  <subsection title="--with-memcached-header">
      --enable-memcache-cookieを指定した場合は必須です。
      libmemcachedのヘッダファイルの場所を指定します。
      <program title="--with-memcached-header">
         $ ./configure --enable-memcache-cookie --with-memcached-header=/usr/include/libmemcached  --with-memcached-lib-dir=/usr/lib
      </program>
  </subsection>
  <subsection title="--with-memcached-lib-dir">
      --enable-memcache-cookieを指定した場合は必須です。
      libmemcachedのライブラリ、libmemcached.soの設置されているディレクトリを指定します。
      <program title="--with-memcached-lib-dir">
         $ ./configure --enable-memcache-cookie --with-memcached-header=/usr/include/libmemcached  --with-memcached-lib-dir=/usr/lib
      </program>
  </subsection>
</subsection>
</section>
<section title="Configuration">
以下はmod_chxjが/usr/lib/apache2/modulesディレクトリ配下に設置されたものとしています

<subsection title="htmlファイルが変換対象の場合">

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

<ol>
<li>httpd.confに以下を追加します。

<program title="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     ==> 変換エンジンを動作させる指示
# NONE         ==> サーバ側の文字コード。（NONEを指定した場合は文字コード変換しない)
#====================================================================================
ChxjConvertRule "^/chxj.+$" "EngineOn" "NONE"

</program>
</li>
<li>apacheの再起動。</li>
</ol>
</subsection>
<subsection title="php等の出力結果が変換対象の場合">
<ol>
<li>httpd.confに以下を追加します

<program title="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"

</program>
</li>
<li>apacheの再起動。</li>
</ol>
</subsection>

<subsection title="xoopsを使用し、且つwordpress、bwikiを使用している場合">
<ol>
<li>httpd.confに以下を追加します

<program title="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" 


&lt;Location /&gt;
  ChxjImageEngine On
  AllowOverride All
&lt;/Location&gt;
</program>
</li>
<li>apacheの再起動。</li>
</ol>
</subsection>




<subsection title="画像自動変換機能を使用する場合">
<ol>
<li>httpd.confに以下を追加します。
下記は、URIが/imgで始まる全ての画像に対して動作するようmod_chxjに指示しています。

<program title="httpd.conf">
&lt;Location /img&gt;
ChxjImageEngine On
ChxjImageCacheDir /tmp
ChxjImageCopyright "A.Konno"
&lt;/Location&gt;
</program>

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

<ol>
    <li>ChxjImageEngine<br />
      mod_chxjの画像変換ハンドラを起動するよう指示しています。
      DefaultはOff
 
      <br />
      <br />
    </li>


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

      <program title="ChxjImageCacheDir">
      ChxjImageCacheDir /tmp
      </program>

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

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

      <program title="ChxjImageCacheLimit">
      ChxjImageCacheLimit 1024
      </program>

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


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

      <program title="ChxjImageCopyright">
      ChxjImageCopyright "A.Konno"
      </program>

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

       <b>AU の場合</b>
       <program title="AU">
       kddi_copyright=on,A.Konno
       </program>

       <b>DoCoMoの場合</b>
       <program title="DoCoMo">copy="NO",A.Konno</program>

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

       <program title="SoftBank/Vodafone/J-PHONE">
         x-jphone-copyright:no-transfer
       </program>

       を埋め込みます。
       <note>SoftBank/Vodafoneの場合は、リクエストＵＲＬの最後が.pnzか、.jpzで終わるようにダミーを付けなければなりません。</note>
    </li>
  </ol>
  </li>
</ol>
</subsection>

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

<program title="httpd.conf">
ChxjConvRule "^/chxj.+$" "EngineOn" "EUC-JP"
</program>

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

    <ol>
        <li>ChxjConvertRule<br />
          サーバサイドの文字コードを指定します。ここに、EUC-JPと指定してあった場合は、
          EUC-JPからCP932に変換後、クライアントに出力されます。
          省略した場合はNONE
          <ol>
             <li>変換エンジン動作指示命令<br />
             ChxjConvertRule ==> ディレクティブ<br />
             "^/chxj.+$"  ==> Perl互換のURIパターン<br />
             EngineOn     ==> 変換エンジンを動作させる指示。動作させたく無い場合は"EngineOff"<br />
             EUC-JP       ==> サーバ側の文字コード。（NONEを指定した場合は文字コード変換しない)<br />
<br />
             EUC-JPからCP932に文字コード変換します。(glibc/iconvに依存します)<br/>
             </li>
          </ol>
     
          <br />
          <br />
        </li>
    </ol>
</li>
</ol>
</subsection>
<subsection title="ディレクティブ">
<ol>
  <li>ChxjLoadDeviceData<br />
  デバイス定義ファイルを指定します。
  <program title="ex)">
    ChxjLoadDeviceData /etc/apache2/device.xml
  </program> 
  </li>
  <li>ChxjLoadEmojiData<br />
  絵文字変換定義ファイルを指定します。
  <program title="ex)">
    ChxjLoadEmojiData   /etc/apache2/chxj/emoji.xml
  </program> 
  </li>
  <li>ChxjImageEngine<br />
  画像変換エンジンを有効にします。
  パラメータとしてOnとOffを指定できます。
  DefaultはOffです。
  <program title="ex)">
    ChxjImageEngine On
  </program>
  </li>
  <li>ChxjImageCacheDir<br />
  イメージの一時ファイル保存場所を指定します。
  <program title="ex)">
    ChxjImageCacheDir   /tmp
  </program> 
  </li>
  <li>ChxjImageCacheLimit<br />
  イメージの一時ファイル保存許容量を指定します。
  下記は1MByteの例。
  <program title="ex)">
    ChxjImageCacheLimit   1048576
  </program>
  </li>
  <li>ChxjImageCopyright<br />
  イメージに著作権情報を付与します。
  <program title="ex)">
    ChxjImageCopyright   "chosakuken jyoho"
  </program> 
  </li>
  <li>ChxjConvertRule<br />
  HTML変換エンジンの適用ルールを記述します。
  本ディレクティブを使用し、変換エンジンのOn|Offを指定します。
  DefaultはOFFです。
  また、ルールは記述された順番に評価し、マッチするものがあれば、その時点で対象ルールを適用します。
  パラメータは3つ必要です。下記にパラメータを記します。
  <table title="パラメータ">
  <tbody>
    <tr>
      <td>第1パラメータ</td><td>URIを評価するPerl互換の正規表現を指定します</td>
    </tr>

    <tr>
      <td>第2パラメータ</td><td>HTML変換エンジンのOn|Offを指定します。Onの場合は"EngineOn"。Offの場合は"EngineOff"を指定します。"EngineOn|EngineOff"の他に"CookieOn|CookieOff"を指定することもできます。複数指定する場合は","で区切って指定します。</td>
    </tr>
    <tr>
      <td>第3パラメータ</td><td>文字コードを指定します。ここで指定した文字コードから"CP932"に変換します。指定できる文字コードはiconv -lコマンドによって確認することができます。変換しなくて良い場合はNONEを指定してください。</td>
    </tr>
    <tr>
      <td>第4パラメータ</td><td>省略した場合は、携帯ページからの変換を意味します。PC用ページからの変換を行う場合は"PC"を第四パラメータに指定します。</td>
    </tr>
    <tr>
      <td>第5パラメータ</td><td>サーバサイドアプリケーションに渡すUser-Agentを指定します。
          例えば、wordpress等のようにCHTMLを出力するアプリケーションがある場合は、"DoCoMo/1.0/N501i"等適当なUser-Agentを指定することによって、アプリケーションにCHTMLを出力するように指示することができます。
          ここで指定したUser-AgentはHTML出力時には評価されません。</td>
    </tr>
  </tbody>
  </table>
  <program title="ex)">
    ChxjConvertRule "^/chxj.+$/" EngineOn EUC-JP
  </program> 
  </li>
  <li>ChxjCookieDir<br />
    クッキー保存先をdbmにする場合（デフォルト）指定します。
    クッキーの内容を保存するディレクトリを指定します。
    指定しない場合は/tmpに保存されます。
  <program title="ex)">
    &lt;Location /&gt;
      ChxjCookieDir   /tmp
    &lt;/Location&gt;
  </program> 
  詳細は「Cookieシミュレート機能」の項を参照ください。
  </li>
  <li>ChxjCookieTimeout<br />
    クッキーを使用する場合に指定します。クッキーの保持期間を秒単位で指定します。
    指定しない場合は、1800秒でクッキーデータを破棄します。
  <program title="ex)">
    &lt;Location /&gt;
      ChxjCookieTimeout 10
    &lt;/Location&gt;
  </program> 
  詳細は「Cookieシミュレート機能」の項を参照ください。
  </li>
  <li>ChxjCookieStoreType<br />
    クッキー保存先を指定します。指定できるものは以下のとおり。
    <table title="保存先">
      <thead>
        <tr>
          <td>値</td><td>意味</td><td>指定例</td>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>"dbm"</td><td>dbmを選択します。</td><td>ChxjCookieStoreType "dbm"</td>
        </tr>
        <tr>
          <td>"mysql"</td><td>mysqlを選択します。<font color="#ff0000">有効にするにはconfigure時にMYSQL COOKIE機能を有効にする必要があります</font></td><td>ChxjCookieStoreType "mysql"</td>
        </tr>
        <tr>
          <td>"memcache"</td><td>memcacheを選択します。<font color="#FF0000">有効にするにはconfigure時にMEMCACHE COOKIE機能を有効にする必要があります</font></td><td>ChxjCookieStoreType "memcache"</td>
        </tr>
      </tbody>
    </table>
  </li>
  <li>ChxjCookieMysqlHost<br />
      MySQLサーバの動作するホストを指定します。
      <program title="ChxjCookieMysqlHostの例">
         ChxjCookieMysqlHost "localhost"
      </program>
      詳細は「Cookieシミュレート機能」の項を参照ください。
  </li>
  <li>ChxjCookieMysqlPort<br />
      MySQLサーバのポート番号を指定します。
      <program title="ChxjCookieMysqlPortの例">
         ChxjCookieMysqlPort 3306
      </program>
      詳細は「Cookieシミュレート機能」の項を参照ください。
  </li>
  <li>ChxjCookieMysqlDatabase<br />
      MySQLサーバのデータベース名を指定します。
      <program title="ChxjCookieMysqlDatabaseの例">
         ChxjCookieMysqlDatabase "test_db"
      </program>
      詳細は「Cookieシミュレート機能」の項を参照ください。
  </li>
  <li>ChxjCookieMysqlUsername<br />
      MySQLサーバに接続する際に使用するユーザ名を指定します。
      <program title="ChxjCookieMysqlUsernameの例">
         ChxjCookieMysqlUsername "roottest"
      </program>
      詳細は「Cookieシミュレート機能」の項を参照ください。
  </li>
  <li>ChxjCookieMysqlPassword<br />
      MySQLサーバに接続する際に使用するパスワードを指定します。
      <program title="ChxjCookieMysqlPasswordの例">
         ChxjCookieMysqlPassword "pwtest"
      </program>
      詳細は「Cookieシミュレート機能」の項を参照ください。
  </li>
  <li>ChxjCookieMysqlSocketPath<br />
      MySQLのソケットパスを指定します。
      <program title="ChxjCookieMysqlSocketPathの例">
         ChxjCookieMysqlSocketPath  "/tmp/mysql.sock"
      </program>
      詳細は「Cookieシミュレート機能」の項を参照ください。
  </li>
  <li>ChxjCookieMysqlCharset<br />
      MySQLのエンコードを指定します。
      <program title="ChxjCookieMysqlCharsetの例">
         ChxjCookieMysqlCharset  "utf8"
      </program>
      詳細は「Cookieシミュレート機能」の項を参照ください。
  </li>
  <li>ChxjCookieMysqlTablename<br />
      MySQLのクッキーを保存するテーブル名を指定します。
      <program title="ChxjCookieMysqlTablenameの例">
         ChxjCookieMysqlTablename  "chxj_cookie"
      </program>
      上記のように"chxj_cookie"と指定すると、実際に作成されるテーブルは、chxj_cookieとchxj_cookie_expireテーブルの2つになります。
      詳細は「Cookieシミュレート機能」の項を参照ください。
  </li>
  <li>ChxjCookieMemcacheHost<br />
      memcachedの動作するホストを指定します。
      <program title="ChxjCookieMemcacheHostの例">
         ChxjCookieMemcacheHost "localhost"
      </program>
      詳細は「Cookieシミュレート機能」の項を参照ください。
  </li>
  <li>ChxjCookieMemcachePort<br />
      memcachedのポート番号を指定します。
      <program title="ChxjCookieMemcachePortの例">
         ChxjCookieMemcachePort 11211
      </program>
      詳細は「Cookieシミュレート機能」の項を参照ください。
  </li>
</ol>
</subsection>
</section>
<section title="対応するCHTMLタグ">
変換可能なCHTMLタグは以下のとおりです。

<table title="対応タグ一覧">
  <thead>
    <tr><th>タグ              </th><th>属性            </th><th>備考</th></tr>
  </thead>
  <tbody>
    <tr><td>&lt;!-- --&gt;    </td><td>                </td><td>無視します。</td></tr>
    <tr><td>&lt;A&gt;         </td><td>                </td><td> </td></tr>
    <tr><td>                  </td><td>name            </td><td>HDMLでは無視します </td></tr>
    <tr><td>                  </td><td>href            </td><td> </td></tr>
    <tr><td>                  </td><td>accesskey       </td><td> </td></tr>
    <tr><td>&lt;BASE&gt;      </td><td>                </td><td>HDMLでは無視します</td></tr>
    <tr><td>                  </td><td>href            </td><td>HDMLでは無視します</td></tr>
    <tr><td>&lt;BODY&gt;      </td><td>                </td><td>HDMLでは無視します</td></tr>
    <tr><td>                  </td><td>bgcolor         </td><td>HDML,CHTML1.0では無視します</td></tr>
    <tr><td>                  </td><td>text            </td><td>HDML,CHTML1.0では無視します</td></tr>
    <tr><td>                  </td><td>link            </td><td>HDML,CHTML1.0では無視します</td></tr>
    <tr><td>                  </td><td>alink           </td><td>HDML,XHTML,CHTML1.0,CHTML2.0,CHTML3.0,JHTML,JXHTMLでは無視します。<strong>0.12.0以降で対応</strong></td></tr>
    <tr><td>                  </td><td>vlink           </td><td>HDML,XHTML,CHTML1.0,CHTML2.0,CHTML3.0,JHTML,JXHTMLでは無視します。<strong>0.12.0以降で対応</strong></td></tr>
    <tr><td>&lt;BLINK&gt;     </td><td>                </td><td>HDML,CHTML1.0では無視します。<strong>0.11.0以降で対応</strong></td></tr>
    <tr><td>&lt;BLOCKQUOTE&gt;</td><td>                </td><td><strong>0.11.0以降で対応</strong>                    </td></tr>
    <tr><td>&lt;BR&gt;        </td><td>                </td><td> </td></tr>
    <tr><td>                  </td><td>clear           </td><td>HDMLでは無視します。<strong>0.11.0以降で対応</strong></td></tr>
    <tr><td>&lt;CENTER&gt;    </td><td>                </td><td> </td></tr>
    <tr><td>&lt;DIR&gt;       </td><td>                </td><td><strong>0.11.0以降で対応</strong></td></tr>
    <tr><td>                  </td><td>type            </td><td>HDML,CHTML1.0,CHTML2.0,CHTML3.0,JHTMLでは無視します。<strong>0.12.0以降で対応</strong></td></tr>
    <tr><td>&lt;DL&gt;        </td><td>                </td><td>HDMLでは無視します。<strong>0.11.0以降で対応</strong></td></tr>
    <tr><td>&lt;DT&gt;        </td><td>                </td><td><strong>0.11.0以降で対応</strong>。必ずタグは閉じてください</td></tr>
    <tr><td>&lt;DD&gt;        </td><td>                </td><td><strong>0.11.0以降で対応</strong>。必ずタグは閉じてください</td></tr>
    <tr><td>&lt;DIV&gt;       </td><td>                </td><td> </td></tr>
    <tr><td>                  </td><td>align           </td><td> </td></tr>
    <tr><td>&lt;FONT&gt;      </td><td>                </td><td>HDML,CHTML1.0では無視します</td></tr>
    <tr><td>                  </td><td>color           </td><td>HDML,CHTML1.0では無視します</td></tr>
    <tr><td>                  </td><td>size            </td><td><strong>0.12.0以降で対応</strong>。HDML,CHTML1.0,CHTML2.0,CHTML3.0,CHTML4.0では無視します。</td></tr>
    <tr><td>&lt;FORM&gt;      </td><td>                </td><td> </td></tr>
    <tr><td>                  </td><td>action          </td><td> </td></tr>
    <tr><td>                  </td><td>method          </td><td>HDMLでは無視します </td></tr>
    <tr><td>&lt;Hn&gt;        </td><td>                </td><td>HDML,JHTMLではalignのみ有効。<strong>0.11.0以降で対応</strong></td></tr>
    <tr><td>                  </td><td>align           </td><td>HDML,JHTMLではalignのみ有効。<strong>0.11.0以降で対応</strong></td></tr>
    <tr><td>&lt;HR&gt;        </td><td>                </td><td> </td></tr>
    <tr><td>                  </td><td>align           </td><td>HDMLでは無視します。</td></tr>
    <tr><td>                  </td><td>size            </td><td>HDMLでは無視します。</td></tr>
    <tr><td>                  </td><td>width           </td><td>HDMLでは無視します。</td></tr>
    <tr><td>                  </td><td>color           </td><td>HDML,CHTML1.0,CHTML2.0,CHTML3.0では無視します。<strong>0.12.0以降で対応</strong></td></tr>
    <tr><td>&lt;HTML&gt;      </td><td>                </td><td>属性を指定した場合は無視されます</td></tr>
    <tr><td>&lt;IMG&gt;       </td><td>                </td><td> </td></tr>
    <tr><td>                  </td><td>src             </td><td> </td></tr>
    <tr><td>                  </td><td>align           </td><td> </td></tr>
    <tr><td>                  </td><td>width           </td><td> </td></tr>
    <tr><td>                  </td><td>height          </td><td> </td></tr>
    <tr><td>                  </td><td>hspace          </td><td>JHTMLでは無視します。 </td></tr>
    <tr><td>                  </td><td>vspace          </td><td>JHTMLでは無視します。 </td></tr>
    <tr><td>                  </td><td>alt             </td><td> </td></tr>
    <tr><td>&lt;INPUT&gt;     </td><td>                </td><td> </td></tr>
    <tr><td>                  </td><td>name            </td><td> </td></tr>
    <tr><td>                  </td><td>type            </td><td>text,password,hidden,radio,checkbox,submit,resetに対応 </td></tr>
    <tr><td>                  </td><td>value           </td><td> </td></tr>
    <tr><td>                  </td><td>istyle          </td><td> </td></tr>
    <tr><td>                  </td><td>size            </td><td>HDMLでは無視します。 </td></tr>
    <tr><td>                  </td><td>maxlength       </td><td> </td></tr>
    <tr><td>                  </td><td>checked         </td><td>HDMLでは非対応。  </td></tr>
    <tr><td>                  </td><td>accesskey       </td><td> </td></tr>
    <tr><td>&lt;LI&gt;        </td><td>                </td><td> </td></tr>
    <tr><td>                  </td><td>type            </td><td><strong>0.11.0以降で対応</strong>。HDML,CHTML1.0では無視します。</td></tr>
    <tr><td>                  </td><td>value           </td><td><strong>0.11.0以降で対応</strong>。HDML,CHTML1.0では無視します。</td></tr>
    <tr><td>&lt;MENU&gt;      </td><td>                </td><td><strong>0.11.0以降で対応</strong>。HDMLでは無視します。</td></tr>
    <tr><td>                  </td><td>type            </td><td>HDML,CHTML1.0,CHTML2.0,CHTML3.0,JHTMLでは無視します。<strong>0.12.0以降で対応</strong></td></tr>
    <tr><td>&lt;MARQUEE&gt;   </td><td>                </td><td><strong>0.11.0以降で対応</strong>。HDML,CHTML1.0,XHTMLでは無視します。</td></tr>
    <tr><td>                  </td><td>direction       </td><td><strong>0.11.0以降で対応</strong>。HDML,CHTML1.0,XHTMLでは無視します。</td></tr>
    <tr><td>                  </td><td>behavior        </td><td><strong>0.11.0以降で対応</strong>。HDML,CHTML1.0,XHTMLでは無視します。</td></tr>
    <tr><td>                  </td><td>loop            </td><td><strong>0.11.0以降で対応</strong>。HDML,CHTML1.0,XHTML,JHTMLでは無視します。</td></tr>
    <tr><td>                  </td><td>bgcolor         </td><td><strong>0.12.0以降で対応</strong>。HDML,CHTML1.0,CHTML2.0,CHTML3.0,CHTML4.0,JHTMLでは無視します。</td></tr>
    <tr><td>&lt;OL&gt;        </td><td>                </td><td><strong>0.11.0以降で対応</strong>。HDMLでは無視します。</td></tr>
    <tr><td>                  </td><td>type            </td><td><strong>0.11.0以降で対応</strong>。HDML,CHTML1.0では無視します。</td></tr>
    <tr><td>                  </td><td>start           </td><td><strong>0.11.0以降で対応</strong>。HDML,CHTML1.0では無視します。</td></tr>
    <tr><td>&lt;SELECT&gt;    </td><td>                </td><td> </td></tr>
    <tr><td>                  </td><td>name            </td><td> </td></tr>
    <tr><td>                  </td><td>size            </td><td>HDMLでは無視します </td></tr>
    <tr><td>                  </td><td>multiple        </td><td>HDML,CHTML1.0では無視します。<strong>0.11.0以降で対応</strong></td></tr>
    <tr><td>&lt;OPTION&gt;    </td><td>                </td><td>必ずタグは閉じてください</td></tr>
    <tr><td>                  </td><td>value           </td><td>  </td></tr>
    <tr><td>                  </td><td>selected        </td><td>HDMLでは無視します </td></tr>
    <tr><td>&lt;P&gt;         </td><td>                </td><td>HDMLではalignのみ有効。 </td></tr>
    <tr><td>                  </td><td>align           </td><td><strong>0.11.0以降で対応</strong>。</td></tr>
    <tr><td>&lt;PLAINTEXT&gt; </td><td>                </td><td><strong>0.11.0以降で対応</strong>。</td></tr>
    <tr><td>&lt;PRE&gt;       </td><td>                </td><td>HDMLは<strong>0.11.0以降で対応</strong>。</td></tr>
    <tr><td>&lt;TEXTAREA&gt;  </td><td>                </td><td> </td></tr>
    <tr><td>                  </td><td>name            </td><td> </td></tr>
    <tr><td>                  </td><td>rows            </td><td> </td></tr>
    <tr><td>                  </td><td>cols            </td><td> </td></tr>
    <tr><td>                  </td><td>accesskey       </td><td><strong>0.11.0以降で対応</strong>。</td></tr>
    <tr><td>                  </td><td>istyle          </td><td><strong>0.11.0以降で対応</strong>。</td></tr>
    <tr><td>&lt;META&gt;      </td><td>                </td><td>                             </td></tr>
    <tr><td>                  </td><td>http-equiv      </td><td>CHTML1.0,HDMLでは無視されます</td></tr>
    <tr><td>                  </td><td>content         </td><td>CHTML1.0,HDMLでは無視されます</td></tr>
    <tr><td>&lt;HEAD&gt;      </td><td>                </td><td>属性を指定した場合は無視されます</td></tr>
    <tr><td>&lt;TITLE&gt;     </td><td>                </td><td>属性を指定した場合は無視されます</td></tr>
    <tr><td>&lt;UL&gt;        </td><td>                </td><td><strong>0.11.0以降で対応</strong>。</td></tr>
    <tr><td>                  </td><td>type            </td><td>HDML,CHTML1.0,CHTML2.0,CHTML3.0,JHTMLでは無視します。<strong>0.12.0以降で対応</strong></td></tr>
    <tr><td>&lt;CHXJ:IF&gt;   </td><td>lang            </td><td>lang属性には&quot;chtml&quot;,&quot;xhtml&quot;,&quot;hdml&quot;,&quot;jhtml&quot;,&quot;jxhtml&quot;が指定できます。(jxhtmlは<strong>0.12.0以降で対応</strong>) </td></tr>
  </tbody>
</table>

上記以外のタグは全て無視します。

</section>
<section title="独自拡張タグ">
<ol>
  <li>&lt;CHXJ:IF&gt;<br />
    
       &lt;CHXJ:IF&gt;タグと&lt;/CHXJ:IF&gt;タグではさまれたタグやテキストは、
       変換せずに<b>そのまま</b><note>変換しませんので注意が必要です</note>出力します。必須の属性としてlangがあります。lang属性を指定することによって、
       例えば、<b>「HDML機の場合のみ出力させる」</b>といったことを可能にします。<br />
       <br />
       ex) 
       <program title="HTML文書中にHDML機の場合のみ有効にしたいタグ、または文書がある場合">
       &lt;CHXJ:IF lang="HDML" &gt;
         &lt;NODISPLAY&gt;
           &lt;ACTION TYPE=ACCEPT TASK=GOSUB DEST='device:data/dnld?url=abc&amp;name=abc.jpg&amp;size=100&amp;disposition=devjaww&amp;title=test'&gt;
         &lt;/NODISPLAY&gt;
       &lt;/CHXJ:IF&gt;
       </program><br />

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

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

       <program title="HDML機,J-PHONE機は以下を出力します">
       &lt;CHXJ:IF lang="chtml" lang="jhtml"&gt;
       あなたの携帯は、HDML機かJ-HTML機です。
       &lt;/CHXJ:IF&gt;
       </program><br />
    
  </li>
</ol>
</section>

<section title="絵文字について">
  i-Mode用の絵文字を書いておけば、アクセスしたキャリアによって、mod_chxjが対応の絵文字に自動変換します。
  ソースに2byteのバイナリコードを直接書いても、10進参照文字列<note>16進参照文字列には対応していません</note>（&amp;#XXX;の形）で書いても、どちらでも変換対象になります。
  １０進参照文字列で書いた場合は、mod_chxjにより、自動で２バイトコードに変換します。
<subsection title="絵文字変換定義">
絵文字の変換に関する動作を変えたい場合（例えば「ハートがあったら、auの場合はスペードに」とか、「変換定義がおかしい」といった場合）は、
emoji.xmlファイルを直接編集することによって定義を変更することが可能です。emoji.xmlはXMLファイルとなっていますので、vi等で簡単に定義を
変更することができます。

<br />
以下に、emoji.xmlファイルの一部を記します。
<program title="emoji.xml">
&lt;?xml encoding="Shift_JIS" &gt;

&lt;emoji&gt;
  &lt;set&gt;
    &lt;no&gt;1&lt;/no&gt;
    &lt;imode&gt;
      &lt;hex1&gt;f8&lt;/hex1&gt;
      &lt;hex2&gt;9f&lt;/hex2&gt;
      &lt;string&gt;&amp;#63647;&lt;/string&gt;
      &lt;description&gt;&lt;/description&gt;
    &lt;/imode&gt;
    &lt;ezweb&gt;
      &lt;A&gt;44&lt;/A&gt;
      &lt;B&gt;44&lt;/B&gt;
      &lt;C&gt;44&lt;/C&gt;
      &lt;D&gt;44&lt;/D&gt;
    &lt;/ezweb&gt;
    &lt;jphone&gt;
      &lt;string&gt;$Gj&lt;/string&gt;
    &lt;/jphone&gt;
  &lt;/set&gt;
</program>

絵文字の定義は、&lt;emoji&gt;タグから&lt;/emoji&gt;タグまでの間にあります。その中の要素を説明します。
1つの絵文字につき、1つのセット（&lt;set&gt;タグから&lt;/set&gt;タグまで）とし、キャリア毎の絵文字を定義しています。

<ol>
  <li>&lt;imode&gt;要素<br />
まず、元となるi-Mode用の絵文字は、&lt;imode&gt;タグにはさまれた間に定義されています。
&lt;imode&gt;要素は、2バイトコード要素(&lt;hex1&gt;&lt;hex2&gt;)と、
10進参照文字列要素(&lt;string&gt;)を保持していて、この２つの要素を変換元の値として使用します。
アクセスしてきた端末が、i-Mode機であった場合で、かつCHTML中に10進参照文字列が絵文字として書かれている場合には、
&lt;hex1&gt;&lt;hex2&gt;要素に定義されている値に置換します。
  </li>
<br />
<br />
  <li>&lt;ezweb&gt;要素<br />
アクセスしてきた端末が、au機であった場合、&lt;ezweb&gt;要素に定義されている値に変換します。
&lt;ezweb&gt;要素は、&lt;A&gt;〜&lt;D&gt;要素を持っていて、それぞれauの絵文字タイプA〜Dに対応していますので、
もし、Dタイプの絵文字端末であったなら、&lt;D&gt;要素に定義されている値に変換します。ここで定義されている値は、
HDML機の場合は、<b>&lt;IMG ICON="XX"&gt;</b>の"XX"の部分に当てはめられて、置換されます。
XHTML機の場合は、<b>&lt;IMG LOCALSRC="XX"&gt;</b>の"XX"の部分に当てはめられて、置換されます。
  </li>
<br />
<br />
  <li>&lt;jphone&gt;要素<br />
アクセスしてきた端末が、SoftBank/Vodafone/J-Phone端末であった場合、&lt;jphone&gt;要素に定義されている値に変換します。
&lt;jphone&gt;要素は、&lt;string&gt;要素を保持していて、ここで定義されている値を直接使用します。
  </li>
</ol><br />
emoji.xmlに定義されていない絵文字で、変換したい絵文字がある場合には、このファイルに新たな定義を足せば、
変換するようになります。
</subsection>
</section>


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


<section title="イメージ画像変換機能">
mod_chxjには、JPEG、GIF、PNG、BMPファイルを置いておくだけで、デバイス定義に従って、それぞれのキャリア対応のフォーマットに変換する機能があります。
画像のサイズ（縦Ｘ横）も、端末の画面サイズに合わせて変換します。
画像のサイズ（バイト数）については、デバイス定義中のキャッシュサイズを見て、その値よりも小さくなるように<b>努力</b>しますが、元の画像が
大きすぎる場合や、複雑な画像の場合には、キャッシュサイズよりも小さくできずに表示できない場合があります。
<br />
それぞれのタグで指定する場合には、ファイル名の拡張子（.jpgや.gif等）をはずした形で指定します。<br />
本機能には３つのモードが存在します。そのモードを以下に記します。

<subsection title="サムネイルモード">
  端末側画面サイズの約３分の１程度のサイズ（縦Ｘ横）に画像を縮小表示します。
  <program title="サムネイルモード 使用例">
  &lt;IMG SRC="/img/logo?Mode=Thumbnail"&gt;
  </program>
</subsection>
<subsection title="壁紙モード">
  端末側画面のサイズにマッチするサイズに拡大・縮小します。横長の画像の場合には、縦幅を合わせた後に左右をトリミングします。
  <program title="壁紙モード 使用例">
  &lt;IMG SRC="/img/logo?Mode=WP"&gt;
  </program>
</subsection>
<subsection title="EzGetモード">
  壁紙ダウンロードを行いたい場合に使用します。EzGETモードは、壁紙モードで出力される画像サイズと同一サイズの画像が使用されます。
  <program title="EzGetモード 使用例">
  &lt;A HREF="/img/logo?Mode=EzGet"&gt;
  </program>
</subsection>
<subsection title="その他の機能">
  モードの他に、画像サイズ（縦Ｘ横）を直接指定することも可能です。
<b>w</b>パラメータ、<b>h</b>パラメータを使用して指定します。
  <ol>
  <li>wパラメータ<br />
  横幅を指定します。
  </li>
  <li>hパラメータ<br />
  縦幅を指定します。
  </li>
  <program title="w/hパラメータ 使用例">
  &lt;IMG SRC="/img/logo?w=100&amp;h=200"&gt;
  </program>
  <li>User-Agentパラメータ（uaパラメータ）<br />
  User-Agentを指定します。指定した場合は、リクエストヘッダ中のUser-Agentを本パラメータの値で上書きします。
  このパラメータに"IGN"を指定した場合は、User-Agentを無視します。Thumbnailモード、壁紙モードと併用時は、
  640x480を元に画像サイズを算出します。
  </li>
  </ol>
</subsection>
上記全てのモード、パラメータはGETリクエストとしてのみ使用できます。
</section>

<section title="QRコード出力機能">
<subsection title="QRコード出力ハンドラの登録">
QRコード出力機能を使用するには、QRコードハンドラを登録します。
<note>QRコードは（株）デンソーウェーブの登録商標です。</note>
httpd.confに以下の記述を追加します。
<program title="httpd.conf">
  AddHandler chxj-qrcode .qrc
</program>
なお、ハンドラを登録しないでも、出力フィルターを経由させることで、QRコードを出力させることも可能です。（※QRコードの動的出力を参照）
</subsection>
<subsection title="QRコードソースファイルの設置">
ハンドラを登録したら、その登録した拡張子を持つファイルを用意します。
<program title="例：a.qrc">
  &lt;?xml version=1.0 ?&gt;
  
  &lt;qrcode&gt;
    &lt;version&gt;13&lt;/version&gt;
    &lt;level&gt;H&lt;/level&gt;
    &lt;mode&gt;8bit&lt;/mode&gt;
    &lt;size&gt;1&lt;/size&gt;
    &lt;data&gt;テストデータです&lt;/data&gt;
  &lt;/qrcode&gt;
</program>
.qrcファイルは、qrcode要素、version要素、level要素、mode要素、size要素、data要素から成り立ちます。
<ol>
<li>versionタグ
  versionタグは出力するQRコードの生成に利用するバージョンを指定します。
  使用できるバージョンは、1〜40までの40種類です。
</li>
<li>levelタグ
  levelタグは出力するQRコードの生成に利用する誤り検出レベルを指定します。
　使用できるレベルは、L、Q、M、Hの４つです。
</li>
<li>modeタグ
  modeタグは出力するQRコードの生成に利用するモードを指定します。
  使用できるモードは、NUM（数字モード）ALPHA（英数字モード）8BIT（8ビットバイトモード）KANJI（漢字モード）です。
</li>
<li>sizeタグ
  sizeタグは１モジュールを何ピクセルであらわすかを指定します。
  0を指定した場合は、4を指定した場合と同じ動作をします。
　使用できるサイズは、0〜20までです。
</li>
<li>dataタグ
  dataタグは、QRコードに出力するデータを指定します。改行した場合は、改行文字もQRコード内に符号化されます。
</li>
</ol>
</subsection>
<subsection title="QRコードの動的出力機能">
  プログラム等を使用し、動的にQRコードを出力したい場合は、上記の.qrcファイルの内容をそのままOutputFilterに通してあげればOKです。つまり、ChxjConvertRuleディレクティブで"EngineOn"と指定したURIが指すディレクトリに設置すれば良いということです。mod_chxj内部で、Content-Typeがtext/xmlの場合、QRCode用のファイルであるかどうかを一度読み込んで判断するので、Content-Typeには、text/xmlを設定してください。

  <program title="phpでQRコードを動的に出力する例">
    &lt;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 "&lt;qrcode&gt;\n";
      echo "&lt;version&gt;".$version."&lt;/version&gt;\n";
      echo "&lt;level&gt;".$level."&lt;/level&gt;\n";
      echo "&lt;mode&gt;".$mode."&lt;/mode&gt;\n";
      echo "&lt;size&gt;".$size."&lt;/size&gt;\n";
      echo "&lt;data&gt;".$data."&lt;/data&gt;\n";
      echo "&lt;/qrcode&gt;\n";
    &gt;
  </program>
  そして、上記のコードを、mod_chxj変換エンジンが処理するはずであるところに設置すれば完了です。
  
</subsection>
</section>
<section title="Cookieシミュレート機能">
<subsection title="Cookieシミュレート機能">
  Cookieを受け付けない（無視する）端末のためにCookieをシミュレートします。本機能を有効にするためにはChxjConvertRuleディレクティブを使用する必要があります。ChxjConvertRuleディレクティブの第２パラメータにCookieOnを指定します。
  
  <program title="Cookieシミュレート機能を有効にする例">
    ChxjConvertRule "^/chxj.+$" "EngineOn,CookieOn" "NONE"
  </program>

</subsection>
<subsection title="One-Time ID">
Cookieシミュレートでは、aタグ、imgタグ、formタグのURL部にOne-Time IDを埋め込むことで実現します。
そのため、ユーザがブラウザの戻るボタン等で戻った場合はCookieを取得できなくなります。
One-Time IDを使用する必要が無い場合、またはOne-Time IDを使用したくない場合には、
CookieLazyModeを使用することで毎回同一IDを発行させることができます。
</subsection>
<subsection title="Cookieの保存場所">
Cookieの内容はサーバ側に保存されます。
保存先にはdbm、memcached、mysqlが選択できます。<br />
<font color="#ff0000">注意) memcached、mysqlを保存先に選択する場合はconfigure時にそれぞれ指定する必要があります</font><br />
保存先の指定にはChxjCookieStoreTypeディレクティブを使用します。
  <program title="ChxjCookieStoreTypeでDBMを指定した例">
    ChxjCookieStoreType "dbm"
  </program>
  <program title="ChxjCookieStoreTypeでMySQLを指定した例">
    ChxjCookieStoreType "mysql"
  </program>
  <program title="ChxjCookieStoreTypeでmemcacheを指定した例">
    ChxjCookieStoreType "memcache"
  </program>
  上記ChxjCookieStoreTypeが指定されない場合はdbmが選択されます。
<br />

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

  <program title="ChxjCookieDirの例">
    ChxjCookieDir /var/abc
  </program>

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

MySQLを使用する場合にはChxjCookieStoreTypeディレクティブのほかに、以下のディレクティブを指定する必要もあります。
<ol>
  <li>ChxjCookieMysqlHost<br />
      MySQLサーバの動作するホストを指定します。
      <program title="ChxjCookieMysqlHostの例">
         ChxjCookieMysqlHost "localhost"
      </program>
  </li>
  <li>ChxjCookieMysqlPort<br />
      MySQLサーバのポート番号を指定します。
      <program title="ChxjCookieMysqlPortの例">
         ChxjCookieMysqlPort 3306
      </program>
  </li>
  <li>ChxjCookieMysqlDatabase<br />
      MySQLサーバのデータベース名を指定します。
      <program title="ChxjCookieMysqlDatabaseの例">
         ChxjCookieMysqlDatabase "test_db"
      </program>
  </li>
  <li>ChxjCookieMysqlUsername<br />
      MySQLサーバに接続する際に使用するユーザ名を指定します。
      <program title="ChxjCookieMysqlUsernameの例">
         ChxjCookieMysqlUsername "roottest"
      </program>
  </li>
  <li>ChxjCookieMysqlPassword<br />
      MySQLサーバに接続する際に使用するパスワードを指定します。
      <program title="ChxjCookieMysqlPasswordの例">
         ChxjCookieMysqlPassword "pwtest"
      </program>
  </li>
  <li>ChxjCookieMysqlSocketPath<br />
      MySQLのソケットパスを指定します。
      <program title="ChxjCookieMysqlSocketPathの例">
         ChxjCookieMysqlSocketPath  "/tmp/mysql.sock"
      </program>
  </li>
  <li>ChxjCookieMysqlCharset<br />
      MySQLのエンコードを指定します。
      <program title="ChxjCookieMysqlCharsetの例">
         ChxjCookieMysqlCharset  "utf8"
      </program>
  </li>
  <li>ChxjCookieMysqlTablename<br />
      MySQLのクッキーを保存するテーブル名を指定します。
      <program title="ChxjCookieMysqlTablenameの例">
         ChxjCookieMysqlTablename  "chxj_cookie"
      </program>
      上記のように"chxj_cookie"と指定すると、実際に作成されるテーブルは、chxj_cookieとchxj_cookie_expireテーブルの2つになります。
  </li>
</ol>

memcachedを使用する場合にはChxjCookieStoreTypeディレクティブの他に以下のディレクティブを指定する必要もあります。
<ol>
  <li>ChxjCookieMemcacheHost<br />
      memcachedの動作するホストを指定します。
      <program title="ChxjCookieMemcacheHostの例">
         ChxjCookieMemcacheHost "localhost"
      </program>
  </li>
  <li>ChxjCookieMemcachePort<br />
      memcachedのポート番号を指定します。
      <program title="ChxjCookieMemcachePortの例">
         ChxjCookieMemcachePort 11211
      </program>
  </li>
</ol>
</subsection>
<subsection title="Cookieの保持期間">
ChxjCookieTimeoutディレクティブで保持期間を指定することができます。指定しなかった場合は1800秒でサーバに保存されているCookieは削除されます。
  <program title="ChxjCookieTimeoutの例">
    &lt;Location /&gt;
      ChxjCookieTimeout 10
    &lt;/Location&gt;
  </program>
  上記の例は、10秒でタイムアウト(サーバから削除)するように指定しています。
</subsection>
<subsection title="CookieLazyMode">
ChxjCookieLazyModeディレクティブで"true"を指定するとOne-Time IDを使用しないようにすることができます。
Cookie用のIDは毎回同一のIDが割り振られます。
以下にCookieLazyModeの例を記します。
<program title="ChxjCookieLazyModeの例">
  ChxjCookieLazyMode true
</program>
true以外を指定すると通常のOne-Time IDモードになります。
</subsection>
</section>



<section title="Refererシミュレート機能">
<subsection title="Refererシミュレート機能">
DoCoMo端末などのRefererに対応していない機種のためにRefererシミュレート機能を提供します。
本機能は、Cookieシミュレート機能を有効にすると、自動で有効になります。
</subsection>
</section>
</body>
</doc>
