PHP4.4.x+MySQL4.1.X+Ethna2.3.2+UTF-8

仕事でPHP4.4.x+MySQL4.1.X+Ethna2.3.2で文字コードはUTF-8という環境でシステムを作ることに。
結構苦労したのでメモ。

■UTF-8について
なんとなくオシャレだなとは思っていたのですが、EthnaがEUC-JPがデフォルトなので特にUTF-8で作りたいとは思っていませんでした。
が、Javascriptを絡ませようとするとUTF-8の方が使い勝手が良いので、敵に回した時にどっちがやっかいかなと考えた時に、経験不足のJavascriptってことになりました。
あと、のちのち全文検索する可能性もあったので、以下のサイトを参考にしたいってのもありました。
MySQL FULLTEXT + Ngram : LIKE検索より数十倍高速な、お手軽 日本語全文検索 について|blog|たたみラボ

■PHP
htaccessファイルに以下の記入して設置。
ActionFormのfilter周りがinternal_encodingを見ているので。
php_value mbstring.language "Japanese"
php_value mbstring.internal_encoding "UTF-8"

■EthnaのUTF-8化
皆さん考えることは同じなようで、たくさんのページが出てきましたが結局ここを参考にしました。
ずんWiki - PHP/Ethna/UTF-8化

デバッグ時のPHPの内部エラーメッセージもUTF-8化するには以下のサイトを参考にEthna.phpを触ります。
エラーメッセージがEUC-JPで書かれているのでそれをUTF-8で送るようにする。

※2007/9/20追記
上記参考サイトの二つを適用すると、アクションフォームでのエラーメッセージが一部文字化けするという事態が発生します。
で、Ethna.phpで追加する一文を以下のように変更すると直ります。
- $message = mb_convert_encoding($message, 'UTF-8', 'EUC-JP');
+ $message = mb_convert_encoding($message, 'UTF-8', 'UTF-8,EUC-JP');

あと、以下のファイルも変更しておくと文字化けしません。
@Ethna/tpl/unittest.tpl
@Ethna/tpl/info.tpl

charset=EUC-JP
↓
charset=UTF-8

■MySQL4.1
一番怖かったのがMySQL4.1系。
あまりの怖さに手を出したくなかったのですが、こればっかりはしょうがないです。
ますは、以下のサイトを参考にMySQLを設定。
MySQL4.1系UTF-8の場合 - phpspot

あと、環境は違いますがphpMyAdmin使っていたので、以下のサイトも参考になりました。
artful xampp:Mysqlに関するPHPMyAdminの文字化け

あとはEthnaの方でAppObjectを使っていたので、以下のサイトを参考にSET NAMES utf8をセット。
GRANADA Hatena - EthnaでAppObjectを使うときデータベースの文字コードを指定する

※2007/09/20追記
getObject('Hoge', 'hogeid', '1111')
みたいにgetObjectと同時に引数で値を取得する際に文字化け発覚。
親のコンストラクタでセットしちゃってるみたいなので、子のコンストラクタへ親のコンストラクタを丸ごと持ってきて、以下のように2行追加。

$this->my_db_rw =& $db_list['rw'];
$this->my_db_ro =& $db_list['ro'];
// XXX: app objはdb typeを知らなくても動くべき
$this->my_db_type = $this->my_db_rw->getType();

+ // utf-8対応
+ $this->db->query("SET NAMES utf8");


いやあ、大変だ。。。

RSSで良く使われている日付形式(W3C-DTF)をPHPで変換の仕方

以下のサイトを参考にすればちょちょいのちょい。
W3C-DTFを解析する

僕はめんどくさいので、

※_parse_w3cdtfが参考サイトの関数名

$parse_date = $this->_parse_w3cdtf($rss_array['dc:date']);
$res_date   = date("Y/m/d",$parse_date['timestamp']);

と、タイムスタンプから生成し直してます。

ということで、トップページのブックマークの読み込みをはてなブックマークへ変更しました。

PHPのini_setじゃ変更できないmbstring.encoding_translation

mbstring.encoding_translationはini_setじゃ変更できないのですね。
もうはまりまくりました。
htaccessも触れなく、共用のレンタルサーバーの時もうサーバの設定に合わせてプログラム&ページ制作していくしかないのですね。

不便だなあ。

PHPのスクリプトをincludeする時にユーザーエージェントは変わる

htmlファイルに読み込ませたphpの中で、携帯かPCかの判別してhtmlを出力していたんだけど、User Agentを使って判別しているライブラリだった為、正しくUser Agentを取得できなかった模様。

まあ、ワンクッションあるから形態のUser Agentは拾えないのですな。
勉強になりました。

今回はもうどちら用のhtmlを表示するかわかっているので引数で対応したけど、わかって無いところでやるとなると面倒だなあと思いました。
が、よく考えてみればincludeするぐらいだから、既にわかってるはずですよね。

うむむ。
ま、ちょっと横着だったってことですな。

僕はヤフーには入れそうにありません

こんな記事を見て早速トライしてみました。
Yahoo!がPHPエンジニアを雇う時に聞く質問
Yahoo!がPHPエンジニアを雇う時に聞く質問」に解答付けてみた

自慢じゃありませんが、半分以上即答できなかったですね。
マニュアル見ればわかるんでしょうが。
というか、マニュアル見てわかれば良いって教育受けてきたから、覚えなくなっちゃったんでしょうか。

でも、これを何も見ずに答えろってことなら、それだけスピードが求められるってことなんでしょうね。
というか常識?

そんなの無理だなー。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 8 of 9

アーカイブ

2012

  • 01
  • 02
  • 03
  • 04
  • 05
  • 06
  • 07
  • 08
  • 09
  • 10
  • 11
  • 12

2011

2010

2009

2008

2007

コンタクト

longkey1[at]gmail[dot]com