这是一篇旧文章,已经得到解答,但我可以为您留下一些其他资源,这些资源是我在遇到此BOM问题时找到的。
http://people.w3.org/rishida/utils/bomtester/index.php在此页面您可以检查特定文件是否包含物料清单。
还有一个方便的脚本,用于输出当前目录中包含BOM的所有文件。
<?php
function fopen_utf8 ($filename) {
$file = @fopen($filename, "r");
$bom = fread($file, 3);
if ($bom != b"\xEF\xBB\xBF")
{
return false;
}
else
{
return true;
}
}
function file_array($path, $exclude = ".|..|design", $recursive = true) {
$path = rtrim($path, "/") . "/";
$folder_handle = opendir($path);
$exclude_array = explode("|", $exclude);
$result = array();
while(false !== ($filename = readdir($folder_handle))) {
if(!in_array(strtolower($filename), $exclude_array)) {
if(is_dir($path . $filename . "/")) {
// Need to include full "path" or it's an infinite loop
if($recursive) $result[] = file_array($path . $filename . "/", $exclude, true);
} else {
if (fopen_utf8($path . $filename))
{
//$result[] = $filename;
echo ($path . $filename . "<br>");
}
}
}
}
return $result;
}
$files = file_array(".");
?>
我发现代码在php.net
Dreamweaver还有助于这一点,它可以让你保存文件并没有包含BOM东西
其后期的答案的选项,但我仍然希望它有帮助。 再见
需要注意的是,今天我在包含的PHP文件顶部的一个'<?php die('test')'显示文件顶部的UTF-8 BOM(这些字符:“?”)时出现问题。这很难弄清楚。那时我发现其中一位开发人员用Unicode保存了文件,而不是ASCII,而且这个PHP无法读取Unicoded PHP文件。我开始了一个新的复制,复制数据并保存在ASCII中,问题就解决了。请注意,如果您遇到过这种情况,某些FTP程序可以为您做到这一点。 – Volomike 2012-05-14 15:12:22
另请注意,当页面出现此UTF-8 BOM表问题时,会话变量似乎无法在页面之间正常工作。我必须在Ubuntu上使用像ghex这样的十六进制编辑器,再加上'iconv -f utf8 -t ascii old.php> new.php'来检测所有的Unicode问题,将它们移除并最终以ASCII形式保存页面iconv命令。一旦完成,我注意到会话变量在页面之间保持状态。 – Volomike 2012-05-14 15:50:40
看来,当在文件中检测到UTF-8 BOM时,永远不会发送用于保存会话的标头,因此页面之间的会话变量将获得全新的会话而不是保持相同的会话。 – Volomike 2012-05-14 16:00:38