【问题标题】:HTML generated with a double space tag after <body>在 <body> 之后使用双空格标记生成的 HTML
【发布时间】:2013-03-27 11:03:36
【问题描述】:

我使用 notepad++ 和 utf-8 编码来编写 php 代码。我遇到了我的标题被向下移动的问题。我发现 Firebug 在&lt;body&gt; 之后显示双空格,所以如果我删除空格,标题会设置到他的位置。但是当我按下“Ctrl+U”来查看 HTML 代码时,我发现一切正常:

<!DOCTYPE html>
<html>
  <head>
  </head>
<body>
  <div id="header">
       <div class="container">
      <img alt="" src="/../images/logo.png" class="active">
       </div>
  </div>
</body>
</html>

如果我选择 Encode\Conver to ANSI 问题会消失,这一点很重要。 我不能使用 ANSI,因为 DB 使用 UTF8,并且记录有西里尔字符。

问题:

<body>

    <div id="header">

【问题讨论】:

    标签: php html utf-8 character-encoding codepages


    【解决方案1】:

    使用十六进制编辑器检查文件。在&lt;body&gt;&lt;div... 之间的某个地方必须有一些“不可见”(例如“whitespace”或其他“不可见”)字符。十六进制编辑器列表可以在here找到。

    对于本示例,最快的解决方案是简单地保存为 ANSI/ASCII,重新打开并再次保存为 UTF-8。这应该摆脱不可见的字符,或者至少在重新打开时显示一些“奇怪”的字符。

    编辑 我查看了您在问题中粘贴的问题;我认为角色因复制/粘贴而丢失了,因为我没有看到任何奇怪的东西:

    (注意0D0A是回车/换行,或者“normal (windows) newlines”和20是普通空格)


    我只记得:我确实看到过一两次从jsFiddle复制代码的问题;它的“格式化程序/语法荧光笔”似乎(或似乎)有时会添加一些不需要的字符。例如,请参阅this question

    另外,BOM 有时会引起麻烦,但这并不能解释 (AFAIK) 为什么空间位于 &lt;body&gt;&lt;div... 之间,因为 BOM 是文件中的前几个字节。如果您使用多个带有 BOM 的 PHP 文件(使用 include()/require() 等)来构建最终输出,那么其中一个文件可能包含不需要的(?)BOM。

    【讨论】:

    • 谢谢我用XVI32编辑器。我在 之前创建了由 FF BB BF 编码的字符。删除它们后,我得到了我想要的。非常感谢!
    【解决方案2】:

    在notepad++中,使用PHP时必须严格使用UTF-8 without BOM。不幸的是,notepad++ 中的UTF-8 意味着 BOM 将被添加到每个 PHP 源文件中。

    因为 PHP 是不经意地编码的,它只会将其视为要回显的文字内容。这将导致各种问题,例如headers already sent 错误以及您的文档在某些浏览器中进入怪异模式。

    只使用UTF-8 without BOM-encoding 比手动删除UTF-8 创建的BOM 要容易得多。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    相关资源
    最近更新 更多