Ankündigung

Einklappen
Keine Ankündigung bisher.

Erzeugte Datei enthält zweimal UTF-8 byte-order mark (BOM)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Erzeugte Datei enthält zweimal UTF-8 byte-order mark (BOM)

    Ich habe ein PHP-Skript (7,xx), das Daten erstellt und diese zum Download senden soll, Klappt alles so weit. Das einzige Problem ist, daß am Anfang der Daten zweimal nacheinander die BOM steht. Ich habe schon alles mögliche probiert, um den charset zu ändern oder die Daten zu konvertieren (iconv, str_replace usw.). Alles nutzlos. Ist auch egal, was für Daten ich sende oder ob ich die Datei erst auf dem Server zwischenspeicher und dann sende oder gleich direkt ausgebe. Wenn ich die Datei auf dem Server ablege, ist sie noch ohne BOM. Einmal BOM wäre ja OK, aber 2x ist falsch.

    PHP-Code:
        header('Content-type: text/xml; charset=ISO-8859-1');        
        
    header('Content-Disposition: attachment; filename="' $titel '.gpx"');
       
    header("Cache-Control: no-cache");
       
    header("Pragma: no-cache");
       
    header('Content-Description: File Transfer');
       
    header("Content-Transfer-Encoding: binary");

       
    $gpxdata "Test";

    /*    
        $f = fopen('php://output', 'w');
        fwrite($f, $gpxdata);
        fclose($f);
    */
    /*    
        $f = fopen('file.gpx', 'w');
        fwrite($f, $gpxdata);
        fclose($f);
        readfile ('file.gpx');
    */
        
    print $gpxdata

  • #2
    charset=ISO-8859-1
    Warum?
    Es sollte alles auf utf-8 stehen.
    https://php-de.github.io/jumpto/utf-8/#konsequent-utf-8

    Kommentar


    • #3
      Spielt keine Rolle, was da steht - ändert sich nichts

      Kommentar


      • #4
        PHP fügt aber von sich aus auch nichts hinzu. du musst halt auf Fehlersuche gehen. Wie sieht der restliche Code aus, sind da Include-Dateien im Spiel, etc.
        Und das man sich nicht zusätzliche Stolpersteine(falsche Zeichenkodierung ausgeben) in den Weg legt, sollte eiogentlich klar sein.

        Prüfe auch mal dein Response im Browser(Fireox oder Chrome) - F12 drücken und dann Network Reiter auswählen, danach F5 drücken um die Seite erneut zu laden.
        Das Script das die Daten erstellt solltest du auch mal untersuchen, oftmals übersieht man da was.

        Kommentar


        • #5
          jag es eben durch dos2unix oder bau dir selbst die nötigen regex, was unsauber ist aber irgendwie auch funktionieren könnte.

          Kommentar


          • #6
            Zitat von tomBuilder Beitrag anzeigen
            j... was unsauber ist...
            Genau. Macht ja auch keinen Sinn wenn das Script erst einen BOM hinzufügt und hinterher genau dieser BOM wieder ausgefiltert wird. Besser ist allemal, zu schauen wo der BOM herkommt und diesen Part dann zu entfernen.

            Kommentar


            • #7
              Zitat von tomBuilder Beitrag anzeigen
              jag es eben durch dos2unix oder bau dir selbst die nötigen regex, was unsauber ist aber irgendwie auch funktionieren könnte.
              Das ist nun wirklich quatsch. Ist doch nicht Aufgabe des Anwenders, meine Probleme zu umschiffen.

              Das Problem ist allerdings ein anderes gewesen:
              PHP-Code:
              include 'dbconfig.php'
              stand am Anfang. Die Datei enthielt nur ein paar Variablendeklarationen - keine Ausgaben etc, die header() stören. Allerdings war die Datei als UTF-8 gespeichert - mit BOM. Nachdem ich diese BOM entfernt hatte, klappt es nun. Alternativ hätte ich die Variablen auch in den Hauptcode einfügen können.

              Kommentar


              • #8
                Ich meinte nichts vom Anwender, aber freut mich dass Du doch noch gefunden hast wo der Schuh drückte.
                Fohe Feiertage an alle.

                Kommentar

                Lädt...
                X