Zeilenumbrüche im PHP xmlwriter-Dokument

8

Ich habe einen XML-Feed, den ich mit XMLWriter erstellt habe. Es funktioniert einwandfrei in einer PHP 5,6 Vagrant Box. Auf dem Live-Server, der PHP 5.4 ausführt, kann der Feed nicht mit einer Nachricht gerendert werden:

%Vor%

Wenn Sie die Quelle anzeigen, sieht das so aus:

Irgendwie werden dem XML-Dokument einige Zeilen hinzugefügt. Der einzige Unterschied zwischen den Servern ist die PHP-Version (soweit ich weiß).

Hier sind die ersten Zeilen des XMLWriter-Codes:

%Vor%

Irgendwelche Ideen, wie man das umgehen kann?

    
user101289 04.08.2015, 04:02
quelle

2 Antworten

11

Ziemlich viele Änderungen von PHP 5.4 auf 5.6 ... geschweige denn Änderungen in libxml ...

Als Erstes müssen Sie sicherstellen, dass vor dem Öffnen von <?php oder nach einem schließenden Tag kein Leerraum vorhanden ist.

Es wäre hilfreich, wenn Sie feststellen könnten, wann die neuen Zeilen eingefügt werden (angenommen, sie sind neue Zeilen ... haben Sie so etwas wie einen Hex-Viewer verwendet?). Versuchen Sie, an einen temporären Speicherort zu schreiben - möchten Sie feststellen, ob dies beim Bereitstellen der Seite oder beim Ausgeben von xmlWriter auftritt.

Dinge, die mir in den Sinn kommen ...

  • Vielleicht sollte klar sein, was indetString sein sollte. $xml->setIndentString(" ");

  • Standardcodierung ...? Vielleicht versuchen Sie, das Set zu bekommen. Würde beim Öffnen von xml tag ... encoding="UTF-8" erwarten. Benutze startDocument('1.0', 'utf-8'); und sollte wahrscheinlich Header wie: header('Content-Type: application/xml; charset=UTF-8'); senden. Ist Ihr default_charset UTF-8?

  • Welche anderen Unterschiede zwischen den beiden Umgebungen? Dinge wie short_open_tag etc.

    • %Code%? Um 5,4 geändert?

Workaround:

  • Versuchen Sie einen Aufruf LIBXML_HTML_NOIMPLIED , bevor Sie mit dem Schreiben in den Ausgabestream beginnen.

  • Verwenden Sie ob_clean .

  • Aktualisieren Sie den Server, der in diesen Tagen auf 5.4 sein möchte:)

ficuscr 06.08.2015, 19:19
quelle
1

Ihr Problem ist die Platzierung des Headers ('Content-type: text / xml');

Probieren Sie dies aus und vergewissern Sie sich, dass NOTHING vor dem Aufruf von header () steht:

%Vor%

Ich denke, das könnte dir helfen!

    
Samane 12.08.2015 10:00
quelle

Tags und Links