charset = iso-8859-1与<!DOCTYPE HTML>发出警告?

aja*_*221 9 html doctype character-encoding html-validation

我刚刚使用W3验证器验证了一个html doc ,发现如果我使用:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
Run Code Online (Sandbox Code Playgroud)

有:

<!DOCTYPE HTML>
Run Code Online (Sandbox Code Playgroud)
  • 它会发出警告 Line 4, Column 72: Using windows-1252 instead of the declared encoding iso-8859-1.

但是,如果我使用它,它是固定的:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Run Code Online (Sandbox Code Playgroud)

我真的不明白发生了什么,我甚至不知道如何使用DOCTYPE标签,我只是复制并粘贴了一个来自网络的标签.

有人能指出我正确的方向来理解:

  • 为什么会这样
  • 以及如何使用DOCTYPE标记

Alo*_*hci 17

更改DOCTYPE只是关闭警告 - 它实际上并没有修复任何东西.

iso-8859-1并且windows-1252是非常相似的编码.它们的区别仅在于与从0x80到0x9F的32字节值相关联的字符,这些iso-8859-1字符映射到控制字符,windows-1252并且映射到某些有用的字符,例如欧元符号.

控制字符在HTML中是无用的,并且Web作者经常错误地声明iso-8859-1并使用这32个值中的一个或多个,就好像它们正在使用一样windows-1252,因此浏览器在看到iso-8859-1声明的字符集时会自动将其更改为windows-1252.

验证器只是警告你会发生这种情况.如果您没有使用任何32字节值,那么您可以简单地忽略警告 - 这不是错误.如果你是,并且你真的想要iso-8859-1解释字节值而不是windows-1252解释,那么你做错了.

同样,这种切换发生在任何DOCTYPE的浏览器中,只是HTML5验证器比HTML4验证器更能帮助它.


And*_*art 6

情侣点数:

  1. 任何HTML5验证都应该带有一丝盐.该规范仍处于积极发展阶段,并非一切都是一成不变的.
  2. 您正在为该元标记使用HTML4语法.尝试<meta charset="iso-8859-1">

也就是说,HTML验证器在这个时代并没有那么多用途.

另外,为什么需要指定特定的字符集?

编辑:

我的不好,显然HTML4的默认值是iso = 8869-1.也就是说,HTML5的默认字符集是utf-8.

有关HTML5 doctype的更多信息,请参阅John Resig的这篇文章

  • 我完全不同意:验证器会捕捉到肉眼可以逃脱的东西.无效的HTML是获得意外的,不一致的行为的好方法,因为每个浏览器可能以不同的方式处理它.示例:未标记或不匹配的标记,无效或损坏的属性,不应该出现的引号,未终止的实体字符串,不正确的嵌套,缺少必需的属性等等.我不确定您使用该示例做了什么. (10认同)