2016-06-07 8 views
0

Was ich versuche zu tun:PHP: der String als streamoutput immer zusätzliche Buchstaben

  • Generieren von XML (Sepa-XML) - Arbeiten!
  • Speichern in db - Arbeiten! (Ich schreibe nur den ganzen Inhalt als BLOB)
  • der Benutzer Lassen Sie die Datei herunterladen - nicht funktioniert, wie ich will

Mein Code:

$sql = 'SELECT ID,XML FROM table WHERE ID = ?'; 
//Connect here 
    $result = $db->prepare($sql); 
    $result->bind_param('i', $_GET['download_xml']); 
    $result->execute(); 
    $result->bind_result($ID, $file); 
    $result->fetch(); 
    header("Content-type: text/xml"); 
    header("Content-Disposition: attachment; filename=test_".$ID.".xml");  
    print($file); 

Es gibt mir die Datei, aber XML- Checker sagt mir, dass vor dem <xml Zeichen stehen. Wenn ich die Datei im Editor öffne, sind keine Zeichen vor dem <xml.

Wenn ich die Daten mit file_put_contents() speichern, funktioniert es gut und ich bekomme eine gut formatierte XML-Datei.

+0

Ich nehme eine wirklich wilde Vermutung hier und Chancen sind, dass ich falsch liegen kann. Es könnte sein [Null Breite Raum] (https://en.wikipedia.org/wiki/Zero-width_space) oder [Byte Mark Reihenfolge] (https://en.wikipedia.org/wiki/Byte_order_mark) verwandte Sachen. Selbst wenn ich recht habe, habe ich keine Ahnung, wie ich das beheben kann. Ich hoffe, dass jemand, der schlauer ist als ich, dir dabei helfen kann. – Andrew

Antwort

0

Stellen Sie sicher, dass Sie vor dem öffnenden php-Tag keine zusätzlichen Zeichen haben.

Dies könnte zu Problemen beim Herunterladen einer Datei führen, da sich vor dem öffnenden Tag ein "Leerzeichen" befindet.

<?php .... 

Dies sieht gleich aus, aber funktioniert, da es kein Zeichen vor dem Tag gibt.

<?php ... 

Der Webserver sendet diese zusätzlichen Zeichen vor der PHP-Ausgabe, wodurch die Datei beschädigt wird.

+0

Danke. Das Problem war, dass die Datei als UTF-8 mit BOM kodiert wurde. Ändern Sie es in UTF-8 ohne BOM tat es. – lyRx

+0

Großartig, Sie könnten das Problem selbst lösen. Fühlen Sie sich frei, Ihre eigene Frage zu beantworten! – cb0

0

Das Problem war, dass die Datei als UTF-8 mit BOM codiert wurde. Ändern Sie es zu UTF-8 ohne BOM tat es.