Cómo eliminar múltiples secuencias BOM UTF-8
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
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;
}
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);
:)
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);
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 \x
secuencias 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
...
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;
}