用双空格标签生成的HTML

时间:2013-03-27 11:03:37

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

我使用notepad ++和utf-8编码来编写php代码。我遇到了一个问题,我的标题被移动了。我创建了Firebug在<body>之后显示双倍空格,所以如果我删除空格,则标题设置到他的位置。但是当我按“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来解决ANSI问题,那么这一点非常重要。 我不能使用ANSI作为DB使用UTF8并且记录具有西里尔字符。

问题:

<body>

    <div id="header">

2 个答案:

答案 0 :(得分:2)

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

尽管如此,最快的解决方案是简单地保存为ANSI / ASCII,重新打开并再次保存为UTF-8。这应该摆脱看不见的角色,或者至少在重新开启时显示一些“怪异”的角色。

修改 我看了你在问题中粘贴的问题;我认为这个角色因复制/粘贴而丢失,因为我没有看到任何奇怪的东西: enter image description here

(请注意,0D0A是回车/换行,或“normal (windows) newlines”且20是正常空间)


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

此外,BOM有时会造成麻烦,但这无法解释(AFAIK)为什么空间介于<body><div...之间,因为BOM是前几个文件中的字节数。如果您正在使用包含BOM的多个PHP文件(使用include() / require()等)来构建最终输出,则其中一个文件可能包含不需要的(?)BOM。

答案 1 :(得分:1)

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

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

使用UTF-8 without BOM - 编码比手动删除由UTF-8创建的BOM更容易。