ethnaの既存フィルターをutf-8で使用する方法

ethnaのデフォルトの文字コードEUCなのだけど、これをutf-8に移行した場合何故か既存のフィルターがうまく動かなかった。以下の方法でうまくフィルターが動くなったので記載しておく。

Ethna_ActionFormの修正

既存のフィルター要素はEthna_ActionForm.phpに記載してある。パスを記載したいところだが個々の環境で違うはずなので検索してほしい。PEARでインストールした場合は、PEARのインストールフォルダ配下に存在するはずだ。

で、Ethna_ActionForm.phpを以下のように修正する。

修正前:
<?php
    /**
     *  フォーム値変換フィルタ: 全角英数字->半角英数字
     *
     *  @access protected
     *  @param  mixed   $value  フォーム値
     *  @return mixed   変換結果
     */
    function _filter_alnum_zentohan($value)
    {
        return mb_convert_kana($value, "a");
    }
?>

修正後:
<?php
    /**
     *  フォーム値変換フィルタ: 全角英数字->半角英数字
     *
     *  @access protected
     *  @param  mixed   $value  フォーム値
     *  @return mixed   変換結果
     */
    function _filter_alnum_zentohan($value)
    {
        return mb_convert_kana($value, "a", "utf-8");
    }
?>

その後にフィルター要素を以下のように記載すると、既存で存在するフィルターが動く。

<?php
var $form = array(
    'sample' => array(
        'name'      => 'サンプル',
        'required'  => true,
        'filter'    => FILTER_HW,
        'type'      => VAR_TYPE_STRING,
    ),
);
?>
まとめ

mbstringの関数が文字コードを判別できなかったためにうまく動かないようだ。なので、上記に記載しているようにmbstringの関数を使用しているところ全てにutf-8であることを教えてやることで、僕の環境ではうまく動いた。


google先生に聞いても分からなかったので、僕の環境特有のことなのかもしれないけど、うまく動いたのでこれで開発を続けようと思う。