将ANSI转换为UTF-8会在doctype之前插入字符

将ANSI转换为UTF-8会在doctype之前插入字符,utf-8,character-encoding,character,ansi,Utf 8,Character Encoding,Character,Ansi,你好 我正在尝试将我的站点从ANSI编码的PHP文件转换为UTF-8。我将header.php和footer.php文件转换为UTF-8,但当我转换index.php时,页面呈现不正确 index.php编码为ANSI: <?php include 'header.php'; echo '<h1>ANSI</h1>'; include 'footer.php'; ?> 产出: 以UTF-8编码的index.php:(从记事本转换而来) 产出: 当我

你好

我正在尝试将我的站点从ANSI编码的PHP文件转换为UTF-8。我将header.php和footer.php文件转换为UTF-8,但当我转换index.php时,页面呈现不正确

index.php编码为ANSI:

<?php
include 'header.php';
echo '<h1>ANSI</h1>';
include 'footer.php';
?>

产出:


以UTF-8编码的index.php:(从记事本转换而来)


产出:

当我检查页面的源代码时,输出似乎是正确的(内容应该在中)。但是,如果我从浏览器中复制UTF-8版本的源代码并将其粘贴到notepad++,则会在某些字符前面加上前缀。它们看起来像一个换行符和“上的重音符号,这是一个BOM(字节顺序标记)

UTF-16BE和UTF-16LE文件(big-endian和little-endian)通常以BOM(Unicode字符0xFEFF)开头,因此您可以检测文件的endianness

UTF-8不存在此问题,但某些转换器仍会插入BOM。这将显示为3个字节作为文件的开头,即0xFEFF的UTF-8表示形式

你没有说你是如何进行转换的。无论你使用什么工具,看看你能不能找到如何告诉它不要插入BOM表,或者找到不同的工具


编辑:确认,我刚看了一下,它是一个以FEFF字符开头的UTF-8编码文件。

使用记事本++将ANSI转换为UTF-8而不使用BOM,非常感谢。
<?php
header('Content-Type: text/html; charset=utf-8');

include 'header.php';
echo '<h1>UTF-8</h1>';
include 'footer.php';
?>
<!DOCTYPE html> // htmlentities() output

%0A%EF%BB%BF%3C%21DOCTYPE+html%3E%0A // urlencode() output