如何删除多个 UTF-8 BOM 表序列

2022-08-30 08:49:41

使用 PHP5 (cgi) 从文件系统输出模板文件,并且在吐出原始 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;
}

即使我已经添加了BOM修复程序,我仍然遇到Firefox接受它的问题。你可以在这里看到一个实时副本:http://ircb.in/jisti/(以及我扔给 http://ircb.in/jisti/home.html 的模板文件,如果你想检查出来的话)

任何想法如何解决这个问题?o_o


答案 1

您将使用以下代码来删除 utf8 bom

//Remove UTF8 Bom

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

答案 2

尝试:

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

:)


推荐