1

考虑以下代码:

<div id="sidebar">
<?php
  require_once('/components/search.php');
  require_once('/components/categories.php');
?>
</div>

search.php并且category.php本质上是相同的结构 - 具有一些特定内容的 div 容器。这里没什么特别的,纯 HTML:

<div class="component">
<!-- blah -->
</div>

require_once但是,当使用(或require/等)插入时include,PHP在每个元素上方添加空格,将其向下推,在Chrome的Inspect Element工具中可识别为空文本节点(删除该节点时空格消失)

从侧边栏脚本中删除所有不必要的空格(使其成为单行代码)并不能修复它。如果我只是用require_once组件的内容替换这些行,空格就不会出现。所以不知道为什么 PHP 在 require 上添加它。有任何想法吗?

更新

这仍然被证明是一个奇怪的。我现在同意这require_once似乎不是根本原因。我决定暂时忽略这个问题,并希望在我进一步研究后它会消失。唉,它仍然存在,所以我做了更多的调查。检查浏览器中的页面源代码确认有问题的代码确实作为一个完整的长行返回http://pastebin.com/dtp7QNbs - 任何标签之间没有空格或回车,但浏览器中出现空格- 在检查元素工具中可识别为每个之间的空行<div class="component">

这是否有助于进一步阐明这个问题?

4

6 回答 6

4

我遇到了同样的问题,并验证了 Kai 将格式更改为 ANSI 的解决方案,但也发现“在没有 BOM 的情况下以 UTF-8 编码”也可以。这是新 Notepad++ PHP 文件的默认格式,因此可以减少一个转换步骤。

似乎一般不建议使用 UTF-8 中的字节顺序标记文件头。我验证了我安装的 VS2010 在保存 PHP 文件时添加了 BOM。

下面的 stackoverflow 文章很好地解释了插入额外空格的位置。

utf-8 和没有 BOM 的 utf-8 有什么不同?

于 2013-04-26T22:37:26.447 回答
2

额外的字符是 BOM(字节顺序标记)。因此,在没有 BOM 的情况下转换为 UTF-8 是真正的诀窍。更多信息:http ://en.wikipedia.org/wiki/Byte_order_mark

于 2014-06-22T11:23:33.390 回答
2

问题解决了!这花了很长时间才弄清楚。简短的回答是我的 php 文件是 UTF-8 编码的。在 Notepad++ 中将其更改为 ANSI 已修复它。

我只是通过对输出 HTML 进行逐个字符的比较来找到问题的真正原因——一个输出来自使用“require_once”的位置,另一个是手动将代码粘贴到位的输出。

在输出的视觉比较中,两者看起来相同 - 长度相同,没有额外/不同的字符。但是当推过preg_split('//', $string)并逐个字符循环时,在每个require_once插入点的开头会显示 3 个额外的“不可见”字符。我将它们识别为 ASCII 字符&#239;&#187;&#191;(双点 i、右 V 形和倒置的问号)。

将编码更改为 ANSI(当我在记事本中逐字重新创建一个脚本时,我发现这是原因,并且没有遇到同样的问题),多余的行已经消失了。

于 2013-02-12T13:26:11.417 回答
1

有时它是因为类文件之后的空白而发生的?>,同样或之前<?php

于 2017-03-03T13:19:15.530 回答
0

首先,放在<?php与 DIV 相同的行:

<div id="sidebar"><?php

这摆脱了之前的空白search.php

然后确保search.php末尾没有换行符,这会导致search.phpand之间出现空格categories.php。一些文本编辑器默认添加尾随换行符,您可能需要覆盖它。

我刚试过这个,输出php main.php是:

<div id="sidebar"><div class="component">
<!-- search.php -->
</div><div class="component">
<!-- categories.php -->
</div></div>
于 2013-02-11T16:02:24.667 回答
0

在程序员的记事本编辑器中使用以下方法很容易将 PHP 文件保存为UTF-8 而不带标记符号:

  1. 文件 -> 编码 -> UTF-8 无标记
  2. 文件 -> 保存

之后该require命令将包含 PHP 脚本而不添加空格。

于 2021-08-24T14:32:59.250 回答