Wie kann ich PHP zwingen, die BOM hinzuzufügen, wenn ich utf8_encode verwende?
Folgendes versuche ich zu tun:
$zip->addFromString($filename, utf8_encode($xml));
Leider (für mich) wird das Ergebnis am Anfang nicht die Stücklistenmarkierung haben.
Haben Sie versucht, selbst einen hinzuzufügen?
Das UTF-8-Stückliste scheint zu sein 0xEF 0xBB 0xBF
damit Sie es an Ihrer Schnur befestigen können nach Umwandlung in UTF-8.
$utf8_with_bom = chr(239) . chr(187) . chr(191) . $utf8_string;
Pass aber auf. utf8_encode
möchte einen ISO-8859-1-String. Wenn Sie mit XML arbeiten, vergewissern Sie sich, dass XML dies nicht ist schon UTF-8 kodiert. Die Kommentare in der Dokumentation deuten darauf hin, dass die Funktion auf verschiedene lustige Arten kaputt ist, also sollten Sie sie nicht herumwerfen, es sei denn, Sie kennt dass du es brauchst.
Denken Sie daran, dass PHP-Strings einfach dumme, unwissende Bytes sind. Sie haben keinen angehängten Zeichensatz. Wenn die Daten in der Zeichenfolge also bereits UTF-8 sind, müssen Sie die Konvertierung nicht ausführen.
Auch der verlinkte Wikipedia-Artikel sagt Folgendes:
Während der Unicode-Standard Stücklisten in UTF-8 zulässt, es erfordert oder empfiehlt es nicht. Die Byte-Reihenfolge hat in UTF-8 keine Bedeutung Eine BOM dient also nur dazu, einen Textstream oder eine Datei als UTF-8 zu identifizieren oder dass sie aus einem anderen Format konvertiert wurde, das eine BOM hat.
Sie müssen sich wahrscheinlich nicht um den BOM-Stepdance kümmern.