Verwenden von PHP5 (cgi) zum Ausgeben von Vorlagendateien aus dem Dateisystem und Probleme beim Ausspucken von rohem HTML.
private function fetch($name) {
$path = $this->j->config['template_path'] . $name . '.html';
if (!file_exists($path)) {
dbgerror('Could not find the template "' . $name . '" in ' . $path);
}
$f = fopen($path, 'r');
$t = fread($f, filesize($path));
fclose($f);
if (substr($t, 0, 3) == b'\xef\xbb\xbf') {
$t = substr($t, 3);
}
return $t;
}
Obwohl ich den BOM-Fix hinzugefügt habe, habe ich immer noch Probleme damit, dass Firefox ihn akzeptiert. Sie können eine Live-Kopie hier sehen: http://ircb.in/jisti/ (und die Vorlagendatei, auf die ich geworfen habe http://ircb.in/jisti/home.html wenn du es dir ansehen willst)
Irgendeine Idee, wie man das beheben kann? o_o
utf8-Datei sollte keine Stückliste haben, wenn Ihr Editor diese einfügt, sollte es eine Konfiguration geben, um diese wegzulassen, wenn Ihr Editor es Ihnen nicht erlaubt, keine BOM einzufügen, ersetzen Sie Ihren Editor.
– Lüge Ryan
24. April 2012 um 2:11 Uhr
ja. Ich verwende n ++ und habe es ohne BOM versucht
– sheppardzw
28. April 2012 um 2:17 Uhr
Sie würden den folgenden Code verwenden, um utf8 bom zu entfernen
Aus irgendeinem Grund wird diese Stückliste in der Google+ API am Ende der Inhaltsvariablen angezeigt, also musste ich sie anpassen, um sie vom Ende der Zeichenfolge zu entfernen.
– Artjom Russakowskij
2. März 2017 um 18:08 Uhr
Kann jemand erklären, wie die Pack-Funktion hier verwendet wird? Ich weiß, dass es eine Zeichenfolge in eine binäre Darstellung konvertiert, aber ich habe Schwierigkeiten zu verstehen, wie dies bei der Identifizierung des BOM-Unicode-Zeichens hilft.
– fGesellschaft
3. Oktober 2018 um 6:19 Uhr
Dies funktionierte hervorragend für meine Anforderung, die CSV-Ausgabe von SSRS zu lesen und an eine größere Datei anzuhängen.
– Trevor
20. Dezember 2018 um 19:28 Uhr
Endlich eine BOM-Escape-Technik, die tatsächlich funktioniert. Vielen Dank!
– Nabil Ali
17. Mai 2019 um 12:30 Uhr
@fsociety Die Stückliste besteht aus drei Bytes – 0xef 0xbb 0xbf. Pack verwendet also ein Format von H *, was bedeutet, dass alle Werte in der Zeichenfolge als hexadezimale Bytes interpretiert werden. Ich bevorzuge die Antwort von o1max (obwohl sie eine niedrigere Punktzahl hat), die einfach eine Zeichenfolge mit Escape-Zeichen verwendet:"\xEF\xBB\xBF"
– Dan
20. April 2021 um 19:50 Uhr
Versuchen:
// -------- read the file-content ----
$str = file_get_contents($source_file);
// -------- remove the utf-8 BOM ----
$str = str_replace("\xEF\xBB\xBF",'',$str);
// -------- get the Object from JSON ----
$obj = json_decode($str);
🙂
Eine andere Möglichkeit, die BOM zu entfernen, ist der Unicode-Codepunkt U+FEFF
$str = preg_replace('/\x{FEFF}/u', '', $file);
b'\xef\xbb\xbf' steht für den Literal-String “\xef\xbb\xbf”. Wenn Sie nach einer Stückliste suchen möchten, müssen Sie doppelte Anführungszeichen verwenden, also die \x Sequenzen werden tatsächlich in Bytes interpretiert:
"\xef\xbb\xbf"
Ihre Dateien scheinen auch viel mehr Müll zu enthalten als nur eine einzige führende Stückliste:
utf8-Datei sollte keine Stückliste haben, wenn Ihr Editor diese einfügt, sollte es eine Konfiguration geben, um diese wegzulassen, wenn Ihr Editor es Ihnen nicht erlaubt, keine BOM einzufügen, ersetzen Sie Ihren Editor.
– Lüge Ryan
24. April 2012 um 2:11 Uhr
ja. Ich verwende n ++ und habe es ohne BOM versucht
– sheppardzw
28. April 2012 um 2:17 Uhr