如果在PHP标头中声明了内容类型和字符集,是否有理由在通常的HTML DTD中再次使用它们?
<?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 ...
答案 0 :(得分:5)
如果要在标题中发送字符集,则无需在HTML标记中重复该字符集。
最好在一个地方发送此信息(DRY原则),就好像字符集冲突(即带有UTF-8的标头和带有iso-8859-1的元数据),浏览器可能会出现怪癖模式。
话虽如此,一些自动化工具(网络抓取工具)可能无法查看标题,只能通过meta
标记来推断页面编码。
为每个页面保持标题和元标记相同非常重要 - 混合使用不同的字符集可能会混淆浏览器并导致显示问题。
答案 1 :(得分:2)
如果某人决定保存页面或网页剪贴板,那么在HTML源代码中使用charset可能会有所帮助。 libxml查找元标记以确定解析标记时要使用的字符集。向你的开发者展示一些网络报道的爱情。
答案 2 :(得分:0)
如果你在HTTP标头中声明它,那么它将在代理转码后继续存在,并且不会在浏览器中触发“哎呀,我猜错编码,从顶部重新解析”。
如果您在文档正文中声明它,那么它将无法在HTTP(或其他具有内容类型标题的系统,如电子邮件)之外访问。
如果你在两者中声明它,那么只要不进行转码,你就可以获得两全其美的效果。
请注意,如果您不使用UTF-8或UTF-16,那么XML规范要求您在XML prolog中指定它(并且使用XML prolog将在IE6中触发Quirks模式)。