3日目の坊主

3日坊主といいますが、その坊主の3日目はどうなっているでしょう?更新されているのか?

SmartIRCをマルチバイト対応にする

2010年02月01日 | 日記
SmartIRCのActionHandlerはマルチバイト対応じゃないので、
日本語のキーワードには反応できない。
なので、日本語の正規表現を入れても正常に動かない。

この原因は、ActionHandlerに登録された文字列かどうかを
判別するのに、preg_matchを使ってるからである。
これを、mb_ereg_matchに入れ替えれば日本語に対応する。

VineLinuxだと、pearから落としてきたphp5のライブラリは
/usr/share/php5-pear/
に入るようになっている。
編集したいSmartIRC.phpは
/usr/share/php5-pear/Net/
にあるので、viか何かで以下の点を変更する。

(SmartIRC 1.0.1用)

2343行:
$regex = '/'.$handlerobject->message.'/';

$regex = $handlerobject->message;

2347行:
(preg_match($regex, $ircdata->message) == 1)) {

(mb_ereg_match("$regex", mb_convert_encoding($ircdata->message,"UTF-8","JIS")) == 1)) {

これで、マルチバイトの正規表現にも対応する。
今回は、一般的な日本語チャンネルを考えて編集したので、
ISO-2022-JP(JIS)になっている。
ここは、チャンネルの仕様に合わせて、
autoなりEUC-JPなりを設定すればいいと思う。
また、今回はUTF-8が標準の文字コードになっているので、
変換先はUTF-8にした。

あとは、registerActionhandlerするときは、
必ずphp.iniに設定されている標準の文字コードで保存すること。
(今回はUTF-8)

分からない場合は、
echo mb_internal_encoding();
?>
みたいなコードを適当に動かせばわかると思う。

そんなかんじ。

最新の画像もっと見る

コメントを投稿