出先で仕事のメールを確認したいというだけのために Squirrelmail を使っていたのだけれど、検証もかねて Scientific Linux 6.2 に移行したところ、動きがおかしくなってしまった。
メニューなどは日本語化されるのに、肝心なメールの内容がまったく表示されない。
ディレクトリごとコピしたものだし、ページ自体は表示されているのだから Apache 周りの問題じゃなさそうだし…そもそも日本語だけ表示されないって言うのは変。
で、探してみたところあっさり原因と対処がわかったのだけれど。
Webメールソフト SquirrelMail の PHP5.4対応
php の htmlspecialchars() をカスタマイズして自前に関数で置き換える、ってこと。自分の環境ではmb_comvert~ のところはいじらなくても日本語メールを表示できた。
ところが。途中までうまく動いていたが compatibility プラグインをインストールしたところで今度は phpエラー『Fatal error: Cannot redeclare』が発生した。
エラーを元に compatibility/includes/1.5.2/global.php に既に『sq_htmlspecialchars()』が定義されていた。function_exists() がうまく動いていないのか、「同じ名前の関数がありまっせ」ってことらしい。面倒くさいのでとりあえずコメントアウトして解決。
// since 1.5.2 // /* コメントアウト if (!function_exists('sq_htmlspecialchars')) { function sq_htmlspecialchars($value, $quote_style=ENT_QUOTES) { if ($quote_style === FALSE) $quote_style = ENT_QUOTES; // array? go recursive... // if (is_array($value)) { $return_array = array(); foreach ($value as $key => $val) { $return_array[sq_htmlspecialchars($key, $quote_style)] = sq_htmlspecialchars($val, $quote_style); } return $return_array; // sanitize strings only // } else if (is_string($value)) { if ($quote_style === TRUE) return str_replace(array('\'', '"'), array(''', '"'), $value ); else return htmlspecialchars($value, $quote_style); } // anything else gets returned with no changes // return $value; } } コメントアウト */