PHP/Ethna
Ads
手順 †
デフォルトのphpやテンプレートやskelをUTF-8化する †
ethna add-project で作成されたファイル類は EUC-JP で作成されるのでこれをUTF-8します。
日本語が含まれていないファイルもありますが、これもエディタで開いたときに文字コードがUTF-8で保存すべしと分かるように頭に適当な日本語も追加します。
以下のスクリプトをUTF-8で作成して実行すれば一発で完了です。
- ethna-utf8.sh
#!/bin/sh
# for ethna-2.3
find skel/ template/ -type f -name \*.tpl | xargs \
perl -i -pe 's/EUC.JP/UTF-8/g; s/^<html>$/<html><!--あいうえお-->/'
find app/ etc/ skel/ www/ -type f -name \*.php | xargs \
perl -i -MEncode -pe'Encode::from_to($_, "EUC-JP", "UTF-8"); s/^<\?php$/<?php \/\/あいうえお/'
エラーメッセージのUTF-8化 †
エラーメッセージはEthnaのプログラムにべたで書いてあるので、自分のプロジェクトのテンプレートやphpを修正だけじゃ足りない。
Ethna 本体に手を入れないで修正する方法を考えてみたのが以下の通り。
- app/XXX_ActionError.php を作成
<?php
/**
* エラーメッセージをUTF-8にコンバートするラッパークラス
*/
class XXX_ActionError extends Ethna_ActionError
{
/**
* エラーオブジェクトを生成/追加する
*
* @access public
* @param string $name エラーの発生したフォーム項目名(不要ならnull)
* @param string $message エラーメッセージ
* @param int $code エラーコード
*/
function add($name, $message, $code = null)
{
$message = mb_convert_encoding($message, 'UTF-8', 'UTF-8,EUC-JP');
parent::add($name, $message, $code);
}
/**
* Ethna_Errorオブジェクトを追加する
*
* @access public
* @param string $name エラーに対応するフォーム項目名(不要ならnull)
* @param object Ethna_Error $error エラーオブジェクト
*/
function addObject($name, &$error)
{
$error->message = mb_convert_encoding($error->message, 'UTF-8', 'UTF-8,EUC-JP');
parent::addObject($name, $error);
}
}
?>
- app/XXX_Controller.php を修正
未解決 †
- __ethna_info__ や __ethna_unittest__ 等の組み込みアクションで利用されるテンプレートのUTF-8化はどうすればいいか?
日高@スタジオ・ポットSD より
私の環境(Ethna2.3.2/PHP5.1.6)では、バリデート部分がうまくうごかず、
/usr/share/pear/Ethna/class/Ethna_ActionError.phpの
/*
if (func_num_args() > 3) {
$userinfo = array_slice(func_get_args(), 3);
$error =& Ethna::raiseNotice($message, $code, $userinfo);
} else {
$error =& Ethna::raiseNotice($message, $code);
}
$this->addObject($name, $error);
return $error;
*/
部分をコメントアウトすることで問題を回避しました。(結局本体に手を入れてしまった……)
もし、スマートな解決法があれば、ぜひ。