2011-10-15 31 views
0

好日子之前插入字符,ANSI轉換爲UTF-8的文檔類型

我試圖從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'; 
?> 

輸出:http://www.quimp.com/gce/ansi.jpg


中的index.php編碼UTF-8:

<?php 
header('Content-Type: text/html; charset=utf-8'); 

include 'header.php'; 
echo '<h1>UTF-8</h1>'; 
include 'footer.php'; 
?> 
(從記事本++轉換)

個輸出:http://www.quimp.com/gce/utf8.jpg

當我檢查了頁面的源代碼,輸出似乎正確的(在<頭「的內容是它應該是)。但是,如果我從瀏覽器中複製UTF-8版本的源代碼並將其粘貼到記事本++中,則會預先添加一些字符。它們看起來像一個斷行,並在「<」的口音:

<!DOCTYPE html> // htmlentities() output 

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

刪除這些文字後,頁面呈現正常。該網站是www.quimp.com。 header.php的內容可以在這裏找到:quimp.com/gce/header.txt

我搜索了噸,但無法找到類似的問題。任何想法可能會導致這種情況?

非常感謝您的時間! -Ben

回答

1

這是一個BOM(字節順序標記)。

UTF-16BE和UTF-16LE文件(big-endian和little-endian)通常以BOM(Unicode字符0xFEFF)開頭,因此您可以檢測文件的字節順序。

UTF-8沒有這個問題,但有些轉換器無論如何都插入了BOM。這將顯示爲3個字節作爲文件的開頭,0xFEFF的UTF-8表示。

你沒有說你是如何進行轉換的。無論您使用的是什麼工具,看看您是否可以找出如何告訴它不要插入BOM或找到不同的工具。

編輯:確認,我只看了http://quimp.com/gce/header.txt,它是一個以FEFF字符開頭的UTF-8編碼文件。

+0

使用記事本++從ANSI轉換到UTF-8沒有BOM做到了,非常感謝。 – Quimp