多年来,我已经在几种不同的浏览器(至少是 Chrome、Firefox 和 Opera)上看到了这种行为,但最近它只发生在 Opera 和 Chrome 中——我认为 Firefox 在某个时候修复了它。如果我有一个页面将相当大的数据块(几千行 HTML)推送到浏览器,如果我在数据中使用任何 HTML 实体,那么当您查看源代码时它们会出现格式错误。
例如,我在页面内容中放置了一个“右下铅笔”实体(✎ - 或✎
),以便标记“编辑”链接。但是,当我在任何浏览器中加载同一页面并单击“查看源代码”时,我会看到一个随机代码,该代码通常与页面 HTML 中实际硬编码的内容不匹配。一些例子包括:
&x#x2#x270E;
, &#x#x270E;
,ɰ#x270E;
检查发送到浏览器的实际源代码的 Fiddler 捕获表明浏览器确实收到了正确的代码。一旦浏览器尝试在视图源选项卡中显示它,似乎就会出现问题。
其他代码也会发生这种情况,
变成&nbnbsp;
等等&nnbsp;
。神秘的是,这些代码会随着每次刷新而随机化。偶尔他们会通过正确的方式,尽管大多数时候他们会出现乱码。代码似乎在前端正确呈现,这只是每个主要浏览器中的一个错误,还是我应该担心通过 HTTP 推送较大数据集时的数据丢失?
过去的测试
我进行了两次测试来确认这一点:
(1) 将单个字符发送到托管在面向公众的 AWS LAMP 服务器上的有效 HTML5 页面内容中。查看了 Opera 中的内容并查看了源代码。大多数都还好,但大约在一半的时候它开始跳闸,并且在整个过程中偶尔会继续:
'#x270E;
(2) 将单个字符发送到托管在 Intranet Windows 服务器上并通过 NetExtender VPN 提供的有效 HTML5 页面内容中。与第一次测试的结果相同。
ɰ#x270E;✎
重现步骤:
我已经在几个不同网络上的许多不同系统(Linux - 到目前为止,如 Ubuntu、Windows 7 和 Windows 10)上对此进行了测试。但是,如果其他人可以证实这一点,我将不胜感激。
- 创建一个有效的 HTML 页面并在正文标记之间粘贴一个 HTML 实体(十进制或十六进制表示)。
- 复制并粘贴字符以填充数百行内容(可能需要更少,但最有可能产生相同问题)。例如:
……等等。 - 将页面保存在您的 Web 服务器上。
- 在新的 Opera 窗口中加载页面。
- 右键单击页面中的任意位置,然后单击“页面源”
- 复制源代码并手动检查或将其粘贴到https://validator.w3.org的 W3 验证器中- 这将有助于指出格式不正确的 HTML 实体。
Opera 49.0 插图
请参阅下面的代码检查器如何显示正确的 HTML 实体代码。但是,当您查看同一部分的页面源时,代码会出现格式错误。