http://moodle.org/mod/forum/discuss.php?d=87001
この辺りと少し似た話です.
Moodle1.9でバルクユーザ処理でユーザのデータをダウンロードする際に,Excel形式でダウンロードするとURLの欄が文字化けします.ハイパーリンク自体は正しくバイナリデータで保存されているのですが,セル内の文字列が化けます.
少々,調査不足の感が否めないのですが,lib/pear/Spreadsheet/Excel/Write/Worksheet.phpのfunction _writeUrlWeb()の頭のところで,引数として受け取った引数$strをUTF-16LEに変換する必要がありそうです.
他の文字データ類と何が処理上で異なるのか分からないという問題がありますので,チェックをキチキチにしてあります.
function _writeUrlWeb($row1, $col1, $row2, $col2, $url, $str, $format = null)
{
$record = 0x01B8; // Record identifier
$length = 0x00000; // Bytes to follow
if (!$format) {
$format = $this->_url_format;
}
// Write the visible label using the writeString() method.
if ($str == '') {
$str = $url;
}
// (Shirai126): バルクユーザ処理のExcel形式でダウンロードしたセルに含まれるハイパーリンクの文字列が文字化けする問題 (2009/03/24)
// (Shirai126): ここから追加
if ($this->_BIFF_version == 0x0600) {
if (function_exists('mb_detect_encoding') && (($enc = mb_detect_encoding($str)) != 'UTF-16LE')) {
if (function_exists('mb_convert_encoding')) $str = mb_convert_encoding($str, 'UTF-16LE', $enc);
}
}
// (Shirai126): ここまで追加
$str_error = $this->writeString($row1, $col1, $str, $format);
if (($str_error == -2) || ($str_error == -3)) {
return $str_error;
}
