php-excel-reader – UTF-8的问题

我使用php-excel-reader 2.21将XLS文件转换为CSV。 我写了一个简单的脚本来做到这一点,但我有一些Unicode字符的问题。 它不返回某些单元格的值。

例如,它没有单元格内容的问题,但是与nákupVÝROBCEPÁSHRUBÝNÁKLADNÍ和其他一些问题有关。 在这些单元格中,它返回空值( "" )。

以下是我用于转换的代码段:

 <?php set_time_limit(120); require_once 'excel_reader2.php'; $data = new Spreadsheet_Excel_Reader("cenik.xls", false, 'UTF-8'); $f = fopen('file.csv', 'w'); for($row = 1; $row <= $data->rowcount(); $row++) { $out = ''; for($col = 1; $col <= $data->colcount(); $col++) { $val = $data->val($row,$col); // escape " and \ characters inside the cell $escaped = preg_replace(array('#”#u', '#\\\\#u', '#[”"]#u'), array('"', '\\\\\\\\', '\"'), $val); if(empty($val)) $out .= ','; else $out .= '"' . $escaped . '",'; } // remove last comma (,) fwrite($f, substr($out, 0, -1)); fwrite($f, "\n"); } fclose($f); ?> 

请注意,单元格和行索引从1开始。任何build议?

我希望这是同样的问题,我有:在行1120 excel_reader2.php,replace

 $retstr = ($asciiEncoding) ? $retstr : $this->_encodeUTF16($retstr); 

 $retstr = ($asciiEncoding) ? iconv('cp1250', 'utf-8', $retstr) : $this->_encodeUTF16($retstr); 

这应该解决它,但是我build议你使用不同的Excel阅读器,如PHPExcel,以避免这样的问题。
请注意,您需要在服务器上启用iconv扩展。

我有这个问题的答案,使用php_excel_reader像普通! 给Spreadsheet_Excel_Reader类添加一个函数:

 function seems_utf8($str) { for ($i=0; $i<strlen($str); $i++) { if (ord($str[$i]) < 0x80) continue; # 0bbbbbbb elseif ((ord($str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb elseif ((ord($str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb elseif ((ord($str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb elseif ((ord($str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb elseif ((ord($str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b else return false; # Does not match any model for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ? if ((++$i == strlen($str)) || ((ord($str[$i]) & 0xC0) != 0x80)) return false; } } return true; } 

然后添加1120行: $retstr = $this->seems_utf8($retstr)?$retstr:utf8_encode($retstr);

完!

你可以使用文件php_excel_reader,我修改! 在这里下载: 文件excel_reader2.php使用像原来的excel阅读器一样