@tokyodead

Не поддерживает русский язык, формат xls?

Добрый день, мне нужно из базы данных автоматически выгружать данные в excel, у меня все выгружается, вот только русский язык не поддерживает, к примеру должно быть "Код_товара" а там РљРѕРґ_товара

Вот код
$connection = mysqli_connect("localhost", "root", "", "dbname");

  $output = '';
  $sql = "SELECT * FROM `nomen`";
  $result = mysqli_query($connection, $sql);
  if(mysqli_num_rows($result) > 0) {
    $output .= '
      <table class="table" bordered="1">
        <tr>
          <th>Код_товара</th>
          <th>Цена</th>
          <th>Количество</th>
        </tr>
    ';
    while($row = mysqli_fetch_array($result)) {
      $output .= '
        <tr>
          <td>'.$row["Artikul"].'</td>
          <td>'.$row["Price"].'</td>
          <td>'.$row["Ostatok"].'</td>
        </tr>
      ';
    }
    $output .= '</table>';
    $fp = fopen("file.xls", "w");
    fwrite($fp, $output);
    fclose($fp);
  }


Подскажите пожалуйстаю
  • Вопрос задан
  • 257 просмотров
Пригласить эксперта
Ответы на вопрос 4
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Разумеется, Excel прекрасно поддерживает русский язык. Вот только работает он на старой, как экскремент мамонта, операционной системе Виндоус, где до сих пор стандартной считается кодировка 1251. И думает, что данные всегда лежат в ней.

Плюс формируете вы не xls, а HTML, замаскированный под xls.
И из-за этой маскировки Excel не предлагает поменять кодировку при импорте.

Поэтому есть два пути
1. Сохранять данные как CSV. Тогда при импорте можно будет выбрать кодировку.
2. Перекодировать данные перед сохранением,
mb_convert_encoding($output, "windows-1251", "utf-8");
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Во-первых, вы выгружаете не в xls, а в HTML. Для работы с xls- и xlsx- файлами есть отдельные библиотеки, например https://github.com/PHPOffice/PhpSpreadsheet.
А проблема с кодировкой у вас в том, что Excel по ожидает текст в однобайтной кодировке (например, Windows-1251), а вы передаёте в многобайтной UTF-8.
Перекодируйте текст через iconv.
Ответ написан
Комментировать
@rPman
Во первых, ты создаешь html а не excel, да офис умеет открывать такие файлы и даже не ругается, но если хочешь работать с документами напрямую, работай с .xlsx или .ods (open document стандарт поддерживается везде и всеми, это стандарт для документооборота, пользуйся лучше им) - это по факту архив с текстовыми xml документами

По факту, настрой кодировку, с которой ты будешь общаться с базой данных set_charset либо поменяй свою кодировку в php коде на ту же что выдает база данных (utf-8) и пропиши в твоем html в в заголовке
Ответ написан
Комментировать
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
Зачем Вам генерация HTML. Делайте выгрузку в CSV файл. Excel прекрасно их открывает.
$con = mysqli_connect("localhost", "root", "", "dbname");

$result = mysqli_query($con, 'SELECT * FROM nomen');
$fp = fopen('file.csv', 'w');
while($row = mysqli_fetch_array($result, MYSQLI_ASSOC))
{
    fputcsv($fp, $row);  
}
fclose($fp);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы