php-excel-reader – проблема с UTF-8

Я использую phpexcel-reader 2.21 для преобразования файла XLS в CSV. Я написал простой скрипт для этого, но у меня есть некоторые проблемы с символами Unicode. Он не возвращает значения из некоторых ячеек.

Например, у него нет проблем с содержимым ячейки ceník položek но есть проблемы с nákup , VÝROBCE , PÁS , HRUBÝ , NÁKLADNÍ и некоторыми другими. В этих ячейках возвращается пустое значение ( "" ).

  • SQL-парсер в PHP?
  • PHP - Получение внутренней переменной float
  • Ошибка PHP / Apache: 406 недопустимо
  • Возможно ли ссылаться на столбец, отличный от 'id' для JoinColumn?
  • Доктрина 2: странное поведение при вставке пакетной обработки объектов, которые ссылаются на другие объекты
  • cURL требует CURLOPT_SSL_VERIFYPEER = FALSE
  • Вот фрагмент кода, который я использую для преобразования:

     <?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. Любые предложения?

  • Преобразование Word doc, docx и Excel xls, xlsx в PDF с PHP
  • DOMDocument :: load - PHP - Получение значения атрибута
  • PHP импортирует Excel в базу данных (xls & xlsx)
  • Чтение большого файла excel с помощью PHP
  • Экспорт данных MySQL в Excel в PHP
  • Каков наилучший способ генерировать excel-выход в PHP?
  • 2 Solutions collect form web for “php-excel-reader – проблема с UTF-8”

    Надеюсь, это та же проблема, что и у меня: в excel_reader2.php в строке 1120 замените

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

    с

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

    Это должно исправить это, однако я предлагаю вам использовать другой читатель 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 Использовать как обычный с Original-excel-reader

    PHP is the Best Programming Language in the world.