XML Дополнительный контент в конце документа

Я получаю эту ошибку:

error on line 4 at column 1: Extra content at the end of the document 

с этим кодом:

  $this->load->database(); function parseToXML($htmlStr) { $xmlStr=str_replace('<','&lt;',$htmlStr); $xmlStr=str_replace('>','&gt;',$xmlStr); $xmlStr=str_replace('"','&quot;',$xmlStr); $xmlStr=str_replace("'",''',$xmlStr); $xmlStr=str_replace("&",'&amp;',$xmlStr); return $xmlStr; } $query = $this->db->get('comboTable'); $query = $query->result_array(); header("Content-type: text/xml"); // Start XML file, echo parent node echo '<markers>'; // Iterate through the rows, printing XML nodes for each foreach ($query as $row) { // ADD TO XML DOCUMENT NODE echo '<marker '; echo 'name="' . parseToXML($row['restaurantName']) . '" '; echo 'address="' . parseToXML($row['address']) . '" '; echo 'lat="' . $row['lat'] . '" '; echo 'lng="' . $row['lng'] . '" '; echo '/>'; } // End XML file echo '</markers>'; 

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

  1. Чтобы отладить это, отправьте заголовок header("Content-type: text"); ,
  2. parseToXML – попытка пересоздать колесо, использовать htmlentities .
  3. (Это и следующее должно быть неактуальным, вы должны использовать htmlentities). Вы заменяете & заменяете все остальное сущностью. Это означает, что вы получаете, &amp;lt; вместо &lt; ,
  4. str_replace принимает массивы в качестве параметров, вам лучше всего их использовать.

Проведя около 3 дней по этой же проблеме, я пришел, чтобы найти лучший и самый простой способ преодолеть это может быть добавлением заголовков следующего к коду:

 header("Content-type: text/xml"); header( 'Content-Disposition: attachment; filename='.$_SESSION['WorkTable'].'_contacts-'.$date.'.xml'); 

Добавьте это в свой код между этими строками:

 $query = $query->result_array(); //add it here <-- header("Content-type: text/xml");