为什么是"​" 被注入我的HTML?

gwg*_*gwg 28 html encoding sublimetext2

编辑:你可以在这里看到问题(在源头看).

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>
Run Code Online (Sandbox Code Playgroud)

但在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>
Run Code Online (Sandbox Code Playgroud)

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

提前致谢.

Juk*_*ela 27

这是来源中的一个问题.在活生生的例子,你提供了以下字节开始(即,它们出现之前<!DOCTYPE html>):0xE2 0x80的0x8B.例如,通过选择"显示格式"下的"Hex",可以看到使用Rex Swain的HTTP Viewer.另请注意,使用W3C标记验证程序验证页面会提供一些信息,表明文档开头存在非常错误,尤其是消息"第1行,第1列:未找到doctype的非空格字符".

验证器和Chrome工具中以及例如Firebug中发生的事情是字节0xE2 0x80 0x8B被视为字符数据,它隐式启动body元素(因为字符数据无法有效地出现在head元素中或之前) ,暗示head在它之前的空元素.

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

由于页面被声明(在HTTP标头中)为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 名称,那么人类可能会错误.

  • 谢谢Jukka!回复较晚,抱歉.虽然你的答案是正确的,但我无法弄清楚如何解决我的具体问题.对于其他有同样问题的人,我在Vim中打开文件,看到:'<200b> <!DOCTYPE html>'.我删除了"<200b>",保存并重新上传,问题就消失了.为什么将这个插入Sublime Text是超出我的. (2认同)

grm*_*dgs 9

我了解SharePoint 2013中存在一个错误,HTML编辑器会将这些字符添加到您的内容中.

我一直在处理这个问题,这是我正在使用的解决方案似乎正在起作用.我将此javascript添加到我的母版页引用的文件中.

var elements = ["h1","h2","h3","h4","p","strong","label","span","a"];
function targetZWS(){
    for (var i = 0; i < elements.length; i++) {
      jQuery(elements[i]).each(function() {
        removeZWS(this);
      });
    }
}
function removeZWS(target) {
  jQuery(target).html(jQuery(target).html().replace(/\u200B/g,''));
}

/*load functions*/
$(document).ready(function() {
    _spBodyOnLoadFunctionNames.push("targetZWS");

});
Run Code Online (Sandbox Code Playgroud)

链接我调查了这个:

  1. https://social.msdn.microsoft.com/Forums/sharepoint/en-US/23804eed-8f00-4b07-bc63-7662311a35a4/why-does-sharepoint-put-in-character-code-8203-in-a-富文本字段?论坛= sharepointdevelopment

  2. https://social.technet.microsoft.com/Forums/office/en-US/e87a82f0-1ab5-4aa7-bb7f-27403a7f46de/finding-8203-unicode-characters-in-my-source-code?forum=sharepointgeneral

  3. http://www.sharepointpals.com/post/Removing-8203-in-RichTextHTML-field-Sharepoint