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();
?>
みたいなコードを適当に動かせばわかると思う。
そんなかんじ。
日本語のキーワードには反応できない。
なので、日本語の正規表現を入れても正常に動かない。
この原因は、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();
?>
みたいなコードを適当に動かせばわかると思う。
そんなかんじ。
※コメント投稿者のブログIDはブログ作成者のみに通知されます