すでに、xoops asGroupwareで日本語化が進んでいるのだから、素直にお願いしてテストさせてもらっても 良いのだが、メッセージなどは日本語である必要性を感じなかったので、本家の物をそのまま使っていたけど、 幾つかの点で日本語を扱うためには、手を加えてやらないといけない事がある事がわかってきた。 特に、ページのタイトルやreferer等は、JavaScriptによってencodeされて渡されるが、 日本語文字に対する encode関数の出力は、IEとNetscape系では異なり、中でもIEでは日本語がUCS-2に変換されて %uXXXXという形式に変換される。 この%uXXXXという形式は、PHPのrawurldecodeとかでは対応出来ないようであり、また英数文字は そのまま出力されるので、扱いにくい文字列になっている。 このため、PHP-Stats PROもそのままでは、ページのタイトルや、検索文字列の日本語部部分は、 %uXXXXという文字列の羅列で出力されてしまう。 そこで、この%uXXXXを含む文字列をEUC-JPに変換する関数を作って、PHP-Stats PROの画面出力部分で この関数を呼び出してやる様に少し手を加えた。 本来は、DBに書き込むときに変換する方が正しいのだと思うけど、DBアクセス周辺を触るのは、ちょっと 恐かったので、表示の際に加工するだけにとどめてある。だから、一部の検索機能では、うまくマッチしない 場合も出てくるが、これは当面あきらめる事にする。
// %uXXXXという文字列を含む文字列を正しい日本語文字列に戻す。 function conv_knj_escape($str) { return mb_convert_encoding( preg_replace_callback("/%u([0-9a-fA-F][0-9a-fA-F])([0-9a-fA-F][0-9a-fA-F])/","_conv_escape",$str), "EUC-JP","auto"); } function _conv_escape($matches){ return mb_convert_encoding(rawurldecode("%".$matches[1]."%".$matches[2]),"EUC-JP","UCS-2"); }