So entfernen Sie mehrere UTF-8-BOM-Sequenzen

Lesezeit: 4 Minuten

So entfernen Sie mehrere UTF 8 BOM Sequenzen
sheppardzw

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

//Remove UTF8 Bom

function remove_utf8_bom($text)
{
    $bom = pack('H*','EFBBBF');
    $text = preg_replace("/^$bom/", '', $text);
    return $text;
}

  • 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:

$ curl http://ircb.in/jisti/ | xxd

0000000: efbb bfef bbbf efbb bfef bbbf efbb bfef  ................
0000010: bbbf efbb bf3c 2144 4f43 5459 5045 2068  .....<!DOCTYPE h
0000020: 746d 6c3e 0a3c 6874 6d6c 3e0a 3c68 6561  tml>.<html>.<hea
...

1646825647 563 So entfernen Sie mehrere UTF 8 BOM Sequenzen
phvisch

Wenn jemand CSV-Import verwendet, ist der folgende Code nützlich

$header = fgetcsv($handle);
foreach($header as $key=> $val) {
     $bom = pack('H*','EFBBBF');
     $val = preg_replace("/^$bom/", '', $val);
     $header[$key] = $val;
}

So entfernen Sie mehrere UTF 8 BOM Sequenzen
Patrick Otto

Diese globale Funktion wird für den Basiszeichensatz des UTF-8-Systems aufgelöst. Panzer!

function prepareCharset($str) {

    // set default encode
    mb_internal_encoding('UTF-8');

    // pre filter
    if (empty($str)) {
        return $str;
    }

    // get charset
    $charset = mb_detect_encoding($str, array('ISO-8859-1', 'UTF-8', 'ASCII'));

    if (stristr($charset, 'utf') || stristr($charset, 'iso')) {
        $str = iconv('ISO-8859-1', 'UTF-8//TRANSLIT', utf8_decode($str));
    } else {
        $str = mb_convert_encoding($str, 'UTF-8', 'UTF-8');
    }

    // remove BOM
    $str = urldecode(str_replace("%C2%81", '', urlencode($str)));

    // prepare string
    return $str;
}

1646825648 918 So entfernen Sie mehrere UTF 8 BOM Sequenzen
trank

Eine Lösung ohne pack Funktion:

$a = "1";
var_dump($a); // string(4) "1"

function deleteBom($text)
{
    return preg_replace("/^\xEF\xBB\xBF/", '', $text);
}

var_dump(deleteBom($a)); // string(1) "1"

  • wenn sie mehr als einmal auftauchen können, solltest du vielleicht “/^(\xEF\xBB\xBF)+/” verwenden

    – Scott

    31. Juli 2020 um 21:40 Uhr

982190cookie-checkSo entfernen Sie mehrere UTF-8-BOM-Sequenzen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy