出先で仕事のメールを確認したいというだけのために 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;
}
}
コメントアウト */