Экспорт / Загрузка таблицы HTML-PHP в файл Excel

У меня есть таблица на HTML / PHP, которая извлекает данные из mySQL. См. Эту ссылку . Например, найдите этот код доставки, чтобы получить результат внутри таблицы: 42-7278954 .

После этого я хочу экспортировать результат в excel (вы также можете увидеть кнопку там).

Ниже представлен мой код таблицы (я удалил несколько столбцов, чтобы сократить код):

$body = ""; $display = "<table class='table_searchshipment' id='table_searchshipment' cellpadding='0' cellspacing='0' border='0'>"; echo $display; $body .= $display; $display = "<thead> <tr> <th>CN No.</th> <th>Doc No.</th> </tr> </thead>"; echo $display; $body .= $display; while($row = mysqli_fetch_array($result)) { $CN_no= $row['CN_no']; $doc_no= $row['doc_no']; $display = "<tr> <td>".$CN_no."</td> <td>".$doc_no."</td> </tr>"; echo $display; $body .= $display; } $display = "</table>"; echo $display; $body .= $display; $body = htmlspecialchars($body); echo '<form action = "setheader" method = "post"> <input type = "hidden" name = "body" value = "<?php echo $body ; ?>"> <input type = "submit" name = "submit" Value = "Export to excel"> </form>'; if(isset($_POST['submit'])){ $body = $_POST['body']; setHeader("export.xls"); echo $body; } 

И в контроллере я создаю функцию setheader:

 public function setheader($excel_file_name)//this function used to set the header variable { header("Content-type: application/octet-stream");//A MIME attachment with the content type "application/octet-stream" is a binary file. //Typically, it will be an application or a document that must be opened in an application, such as a spreadsheet or word processor. header("Content-Disposition: attachment; filename=$excel_file_name");//with this extension of file name you tell what kind of file it is. header("Pragma: no-cache");//Prevent Caching header("Expires: 0");//Expires and 0 mean that the browser will not cache the page on your hard drive } 

Появится всплывающее окно загрузки, но оно загружает только файл «setheader», содержащий уведомление об ошибке. Пожалуйста, смотрите здесь .

В первую очередь,

Эта строка должна измениться:

 echo '<form action = "setheader" method = "post"> <input type = "hidden" name = "body" value = "<?php echo $body ; ?>"> <input type = "submit" name = "submit" Value = "Export to excel"> </form>'; 

чтобы:

 echo '<form action = "setheader" method = "post"> <input type = "hidden" name = "body" value = "'.$body.'"> <input type = "submit" name = "submit" Value = "Export to excel"> </form>'; 

Во-вторых, $body = htmlspecialchars($body); скорее всего, возвращает пустую строку.

Из документов PHP

Если входная строка содержит недопустимую последовательность блоков кода в данной кодировке, будет возвращена пустая строка, если не установлены флаги ENT_IGNORE или ENT_SUBSTITUTE.

Не зная, какие данные поступают из базы данных, трудно проверить это дальше.

Но вы можете попробовать:

$body = htmlspecialchars($body, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); чтобы решить, разрешит ли он эту проблему.