html - 为什么 "​"被注入(inject)到我的 HTML 中?

标签 html encoding sublimetext2

编辑:您可以看到问题 here (查看源代码)。

EDIT2:有趣的是,它不是源代码中的问题。仅适用于控制台(还有 Firebug)。

我在名为 test.html 的文件中有以下标记:

​<!DOCTYPE html>
<html>
<head>
    <title>Test Harness</title>
    <link href='/css/main.css' rel='stylesheet' type='text/css' />
</head>
<body>
    <h3>Test Harness</h3>
</body>
</html>

但在 Chrome 中,我看到:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    "&#8203;


        "
    <title>Test Harness</title>
    <link href='/css/main.css' rel='stylesheet' type='text/css' />
    <h3>Test Harness</h3>
</body>
</html>

看起来像&#802是一个零宽度的空间,但是是什么原因造成的呢?我正在使用带有 UTF-8 编码的 Sublime Text 2 和带有 Jinja2 的 Google App Engine(但 Jinja 只是加载 test.html)。有什么想法吗?

提前致谢。

最佳答案

这是源代码中的一个问题。 live example您提供的内容以以下字节开头(即,它们出现在 <!DOCTYPE html> 之前):0xE2 0x80 0x8B。这可以看出,例如使用 Rex Swain 的 HTTP Viewer通过在“显示格式”下选择“十六进制”。另请注意 validating带有 W3C 标记验证器的页面提供的信息表明文档的开头存在严重错误,尤其是消息“第 1 行,第 1 列:在未先查看文档类型的情况下找到非空格字符。”

在验证器和 Chrome 工具中发生了什么——以及例如在 Firebug 中 – 字节 0xE2 0x80 0x8B 被视为字符数据,这隐式启动了 body元素(因为字符数据不能有效地出现在 head 元素中或其之前),意味着一个空的 head它之前的元素。

当然,解决方案是删除那些字节。浏览器通常会忽略它们,但您不应依赖此类错误处理,并且这些字节会阻止有用的 HTML 验证。如何删除它们,以及它们最初是如何到达那里的,取决于您的创作环境。

由于页面被声明(在 HTTP header 中)为 UTF-8 编码,这些字节代表 ZERO WIDTH SPACE (U+200B) 字符。它没有可见的字形,也没有宽度,因此即使浏览器将其视为 body 开头的数据,您也不会在视觉呈现中注意到任何内容。元素。符号 &#8203;是它的字符引用,大概被浏览器工具用来指示通常不可见字符的存在。

生成 HTML 文档的软件可能是为了插入 ZERO WIDTH NO-BREAK SPACE (U+FEFF) 代替。那将是有效的,因为根据特殊约定,UTF-8 编码数据可能以此字符开头,当出现在数据开头时,也称为字节顺序标记 ( BOM )。使用 U+200B 而不是 U+FEFF 听起来像是软件不太可能犯的错误,但如果人类想到字符的 Unicode 名称,他们可能会这样误会。

关于html - 为什么 "&#8203;"被注入(inject)到我的 HTML 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18478847/

相关文章:

encoding - 为什么base64编码的字符串末尾有=号

sublimetext2 - Sublime Text 文件名中出现奇怪的字符串

sublimetext2 - 在 Sublime Text 中使用 Less Css 合并两个单独的 CSS 文件

sublimetext2 - 如何在 Sublime text 2 中为每种文件类型设置标签大小?

javascript - html javascript在div中获取长度名称

jquery - 读取多个cookie

javascript - 页面重定向后 Jquery 不起作用

ruby - :replace,如何用:invalid and :undef args for encoding using CSV.读取?

javascript - 从 html 调用时未定义导入的 Javascript 函数

r - 在 R 中读取 XML 时编码丢失