EthnaでUTF8を扱うもっともシンプルな方法

ようやくUTF8での運用に慣れたきがするので、どうやってUTF-8を使っているのか紹介。

EthnaでUTF-8なWebアプリを作る場合、templateをすべてUTF-8で書いてやればいいわけですが、ActionFormのValidateなどで表示されるEthna内部に書かれているエラーメッセージがEUC-JPの為、エラーメッセージが文字化けしてしまいます。

今までは、Ethna全体や、エラーメッセージが書かれたファイルをUTF-8化してみたりしていましたが、結構面倒です。(ちょっと力技過ぎる)

そこで、エラーメッセージを表示するメソッドを継承して文字コード変換を行います。

以下のコード(Ethna_ActionError_UTF8.php)をコントローラーの設定を変更してActionErrorと置き換えるだけです。


<?php
require_once 'Ethna/class/Ethna_ActionError.php';
class Ethna_ActionError_UTF8 extends Ethna_ActionError
{
    /**
     *  アプリケーションエラーメッセージを取得する
     *
     *  @access private
     *  @param  array   エラーエントリ
     *  @return string  エラーメッセージ
     */
    function _getMessage(&$error)
    {
        $af =& $this->_getActionForm();
        $form_name = $af->getName($error['name']);
        $result = str_replace("{form}", $form_name, $error['object']->getMessage());
        return mb_convert_encoding($result, 'UTF-8', 'EUC-JP');
    }
}
?>

これを使うようにすると、ソースコードの文字コード変換と比べて何が楽かっていうと、ae->addでエラーを追加すれば、EUC-JPのままActionから日本語でエラーメッセージが送れるわけです。

便利ですよね。と思ったけどみんなActionError全然使ってない気がしてきたので続き書くのやめる。いや、ae->add使うと、templateのerrorsに入るしis_errorで検出できるので例えばerror.tplってのを用意しておいて、ae->addしたらerror.tplへ飛ばすようにすると、どのActionでも同じテンプレでエラー表示画面が作れて手間が省けてラッキーとかそんなんです。

Related posts:

  1. PHPでコマンドラインから使える英辞郎
  2. 最近のSQLite操作とか
  3. Haste_ADOdb完成した。
  4. PEARパッケージが存在するかどうかチェックする
  5. Shomaさんが作ったHTML_TagCloudを使ってみた

EthnaでUTF8を扱うもっともシンプルな方法” への3件のコメント

  1. ActionErrorむっちゃ使ってますよ。
    Formで不正な値や、変な結果になったらとりあえず
    $this->ae->add()
    で。すげーべんりです。

  2. 超タイムリー。
    使ってみよう。
    というか続き知りたいです。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

ねこ認証:9つのパネルの中からねこを3匹選んでください

Additional comments powered byBackType