2010-10-11 80 views
2

如果在PHP頭中聲明瞭內容類型和字符集,是否有理由在通常的HTML DTD中再次使用它們?我是否需要在HTML和PHP中聲明內容類型/字符集?

<?php ob_start('ob_gzhandler'); 
header('Content-type: text/html; charset=utf-8'); ?> // here 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> // and here 
... 

回答

5

如果您發送的報頭中的字符集,則沒有必要重複的HTML標記。

最好是在一個地方發送這個信息(DRY原則),好像字符串衝突(即一個UTF-8的頭和一個帶iso-8859-1的meta),瀏覽器可能會去怪癖模式。儘管如此,一些自動化工具(網絡抓取工具)可能不會查看頁眉並僅通過meta標籤推斷頁面編碼。

爲每個頁面保留標題和元標記都很重要 - 混合不同的字符集可能會混淆瀏覽器並導致顯示問題。

+0

感謝您的快速回答!如果是這種情況,那麼基於上述情況的正確標記是什麼?我可以刪除整個''行嗎? – 2010-10-11 09:40:44

+0

@Isaac Lubow - 'meta'標籤可以被移除,因爲它只是重新標題中的字符集。 – Oded 2010-10-11 09:48:22

2

如果有人決定保存一個頁面,或者對於web scrappers :),在HTML源代碼中使用charset可能會有所幫助。 libxml查找元標記以確定解析標記時使用的字符集。向您的開發者展示一些網絡熱愛。

0

如果你在HTTP頭文件中聲明它,那麼它將在代理服務器轉碼時不存在,並且不會在瀏覽器中觸發「Whoops,我猜錯了編碼,從頭開始解析」。

如果在文檔主體中聲明它,它將在HTTP(或帶有內容類型標題的另一個系統,如電子郵件)之外訪問後繼續存在。

如果你在兩者中聲明它,那麼只要沒有轉碼發生,你就可以得到兩全其美的效果。

請注意,如果您不使用UTF-8或UTF-16,那麼XML規範要求您在XML prolog中指定它(並且使用XML prolog將在IE6中觸發Quirks模式)。

相關問題