为了定义HTML5 Doctype的字符集,我应该使用哪种符号?
短:<meta charset=“utf-8”/>长:<meta http equiv=“Content Type”Content=“text/html;charset=utf-8”/>
为了定义HTML5 Doctype的字符集,我应该使用哪种符号?
短:<meta charset=“utf-8”/>长:<meta http equiv=“Content Type”Content=“text/html;charset=utf-8”/>
这两种形式的元字符集声明都是等效的,并且在不同的浏览器之间应该是相同的。但是,在将web文件字符集声明为UTF-8时,需要记住以下几点:
以UTF-8编码保存文件,不使用字节顺序标记(BOM)。使用元字符集在HTML文件中声明编码(如上所述)。web服务器必须为文件提供服务,在Content-Type HTTP标头中声明UTF-8编码。
默认情况下,Apache服务器配置为提供ISO-8859-1中的文件,因此您需要在.htaccess文件中添加以下行:
AddDefaultCharset UTF-8
这将配置Apache以提供在Content-Type响应标头中声明UTF-8编码的文件,但首先必须以UTF-8(无BOM)保存文件。
记事本无法在没有BOM的情况下以UTF-8格式保存文件。可以使用Notepad++的免费编辑器。在程序菜单栏上,选择“编码>编码为UTF-8,不带BOM”。您还可以使用“编码>转换为UTF-8而不使用BOM”打开文件并以UTF-8格式重新保存。
有关维基百科字节顺序标记(BOM)的更多信息。
使用短字符集的另一个原因是它与您可能在标记中指定字符集的其他实例相匹配。例如:
<script type="javascript" charset="UTF-8" src="/script.js"></script>
<p><a charset="UTF-8" href="http://example.com/">Example Site</a></p>
一致性有助于减少错误并使代码更可读。
请注意,charset属性不区分大小写。您可以使用UTF-8或UTF-8,但UTF-8更清晰、更可读、更准确。
此外,绝对没有理由在元字符集属性或页头中使用UTF-8以外的任何值。UTF-8是自1999年HTML4以来Web文档的默认编码,也是制作现代网页的唯一实用方法。
此外,不应使用UTF-8格式的HTML实体。版权符号等字符应直接键入。您应该使用的唯一实体是五个保留标记字符:小于、大于、与号、素数、双素数。
实体需要一个HTML解析器,您可能不希望一直使用它。它们会引入错误,降低代码的可读性,增加文件大小,有时还会根据使用的实体在各种浏览器中进行错误解码。了解如何键入/插入版权、商标、开放式引号、封闭式引号、撇号、em dash、en dash、bullet、Euro以及您在内容中遇到的任何其他字符,并在代码中使用这些实际字符。
Mac有一个字符查看器,您可以在键盘系统首选项中打开它,然后可以找到并拖放所需的字符,或者使用匹配的键盘查看器查看要键入的键。例如,商标为Option+2。UTF-8包含所有来自人类书面语言的字符和符号。
因此,没有理由使用——而不是em破折号。学习标点符号和排版规则也不是一个坏主意。。。例如,知道一个句号在一个引号内,而不是在引号外。
对类似内容类型和编码的内容使用<meta>标记讽刺的是,因为不知道这些,你就无法解析文件以获取元标记的值。
不,这不是真的。浏览器开始将文件解析为浏览器的默认编码,UTF-8或ISO-8859-1。由于US-ASCII是ISO-8859-1和UTF-8的子集,浏览器可以通过任何方式读取<html><head>。。。这是一样的。当浏览器遇到元字符集标记时,如果编码与浏览器已经使用的编码不同,则浏览器将以指定的编码重新加载页面。
这就是为什么我们将元字符集标记放在顶部,就在head标记之后,在任何其他标记之前,甚至在标题之前。这样,您可以在标题中使用UTF-8字符。
您必须以UTF-8编码保存文件,而不使用BOM
这并非绝对正确。如果文档中只有US-ASCII字符,则可以将其另存为US-ASCIII并以UTF-8格式提供,因为它是一个子集。但如果有Unicode字符,则您是正确的,您必须另存为UTF-8而不带BOM。
如果你想要一个好的文本编辑器来保存你的文件在UTF-8中,我建议使用Notepad++。
在Mac上,使用Mac应用商店的裸骨TextWrangler(免费),或Mac应用商店售价39.99美元的裸骨BBEdit……对于这样一个伟大的工具来说,非常便宜。
在这两个应用程序中,文档窗口底部都有一个菜单,您可以在其中指定文档编码,并且可以轻松选择“UTF-8无BOM”。当然,您可以在“首选项”中将其设置为新文档的默认设置。
但是如果您的Web服务器提供HTTP头中的编码,这是推荐的,两个[元标签]都是不必要的。
这是不正确的。当然,您应该在HTTP头中设置编码,但也应该在meta-charset属性中设置它,以便用户可以将页面保存到浏览器外的本地存储中,然后稍后再次打开,在这种情况下,唯一的编码指示是meta-charsset属性。
出于同样的原因,您还应该设置一个基标记。。。在服务器上,基本标记是不必要的,但当从本地存储打开时,基本标记使页面能够像在服务器上一样工作,所有资产都在适当的位置上,没有断开的链接。
添加默认字符集UTF-8
或者您可以更改特定文件类型的编码,如下所示:
AddType text/html;charset=utf-8 html
为UTF-8和Latin-1(ISO-8859-1)文件提供服务的一个技巧是给UTF-8文件一个“text”扩展名,给Latin-1文件“txt”
AddType text/plain;charset=iso-8859-1 txt
AddType text/plain;charset=utf-8 text
最后,考虑使用Unix行结尾保存文档,而不是传统的DOS或(经典的)Mac行结尾,这既没有帮助,也可能会造成伤害,尤其是在我们离这些传统系统越来越远的时候。
一个具有有效HTML5、UTF-8编码和Unix行结尾的HTML文档是一项很好的工作。您可以在许多上下文中共享、编辑、存储、读取和恢复并依赖该文档。这是通用语。这是数码纸。
<meta charset=“utf-8”>是为HTML5引入的。
如文件中所述,两者均有效。然而,<meta charset=“utf-8”>仅适用于HTML5(并且更容易键入/记住)。
在适当的时候,旧风格在不久的将来必然会被弃用。我会坚持使用新的<meta charset=“utf-8”>。只有一条路,但向上。就科技而言,这是在逐步淘汰旧的(真的,真的很快)
文档:HTML元字符集属性-W3Schools
使用HTML5时,请在web浏览器中使用<meta charset=“utf-8”/>。
当使用HTML4或XHTML时,或者对于过时的DOM解析器(如PHP 5.3中的DOMDocument),请使用<meta-http-equiv=“Content-Type”Content=“text/html;charset=utf-8”/>。
虽然不质疑其他答案,但我认为以下内容值得一提。
“长”(http equiv)符号和“短”符号相等。先到者获胜;Web服务器标头将覆盖所有<meta>标记;BOM(字节顺序标记)将覆盖所有内容,在许多情况下,它将影响HTML4(可能还有其他内容);如果您没有声明任何编码,您可能会在浏览器定义的“回退文本编码”中获取文本。在Firefox和Chrome中都不是UTF-8;在没有其他线索的情况下,浏览器将尝试读取您的文档,就好像它是ASCII码一样来获取编码,因此您不能使用任何奇怪的编码(不过,带BOM的UTF-16应该可以);虽然规范规定编码声明必须在文档的前512字节内,但大多数浏览器都会尝试读取更多。
您可以通过运行echo“HTTP/1.1 200 OK”进行测试\r\n内容类型:text/html;charset=windows-1251\r\n\r\nxef\xbb\xbf<!DOCTYPE html><html><head><meta http equiv=“Content Type”Content=“text/html;charset=utf-8”><meta charset=“windows-1251”><title>привет</title></head><body>повт</body></html>'|nc-lp 4500,并将浏览器指向localhost:4500。(当然,您需要更改或删除零件。BOM零件是\xef\xbb\xbf。请注意外壳的编码。)
请注意,显式声明编码非常重要。让浏览器猜测可能会导致安全问题。
有一些基于Mozilla基金会和SitePoint的新闻:
不要使用此值(http-equiv=content-type),因为它已过时。首选<meta>元素上的charset属性。
要在电子邮件中嵌入签名,我会使用长版本:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
原因是没有多少电子邮件阅读器使用HTML5,所以最好使用旧的HTML样式。实际上,使用表也比使用divs+CSS更好。