Cómo eliminar múltiples secuencias BOM UTF-8

Resuelto sheppardzw asked hace 54 años • 12 respuestas

Usar PHP5 (cgi) para generar archivos de plantilla desde el sistema de archivos y tener problemas para escupir HTML sin formato.

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;
}

Aunque agregué la corrección BOM, todavía tengo problemas para que Firefox la acepte. Puede ver una copia en vivo aquí: http://ircb.in/jisti/ (y el archivo de plantilla que publiqué en http://ircb.in/jisti/home.html si desea consultarlo)

¿Algúna idea de cómo arreglar esto? o_o

sheppardzw avatar Jan 01 '70 08:01 sheppardzw
Aceptado

Usarías el siguiente código para eliminar utf8 bom

//Remove UTF8 Bom

function remove_utf8_bom($text)
{
    $bom = pack('H*','EFBBBF');
    $text = preg_replace("/^$bom/", '', $text);
    return $text;
}
jasonhao avatar Mar 15 '2013 02:03 jasonhao

intentar:

// -------- 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); 

:)

o1max avatar Sep 18 '2013 11:09 o1max

Otra forma de eliminar la lista de materiales, que es el punto de código Unicode U+FEFF

$str = preg_replace('/\x{FEFF}/u', '', $file);
Dean Or avatar Jun 19 '2014 17:06 Dean Or

b'\xef\xbb\xbf'representa la cadena literal "\xef\xbb\xbf". Si desea verificar una lista de materiales, debe usar comillas dobles, de modo que las \xsecuencias se interpreten en bytes:

"\xef\xbb\xbf"

Sus archivos también parecen contener mucha más basura que una sola lista de materiales principal:

$ 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
...
deceze avatar Apr 24 '2012 02:04 deceze

Si alguien usa la importación csv, el siguiente código es útil.

$header = fgetcsv($handle);
foreach($header as $key=> $val) {
     $bom = pack('H*','EFBBBF');
     $val = preg_replace("/^$bom/", '', $val);
     $header[$key] = $val;
}
phvish avatar Jul 18 '2018 06:07 phvish