考虑下面的代码:
<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的检查元素工具的空文本节点(当该节点被删除空格消失)
删除所有不必要的空白从侧边栏脚本(使它的一行代码)不固定。 如果我只需更换require_once
与组件的内容线,空白不会出现。 所以,不知道为什么PHP是增加它要求。 有任何想法吗?
更新
这一个仍然被证明是一个奇怪的一个。 我现在同意require_once
似乎并没有被根本原因是这样的。 我决定忽略了一段时间的问题,并希望我会进一步在它的工作后,它会消失。 唉,它仍然存在,所以我做了一点调查。 检查在浏览器页面的源代码确认有问题的代码确实是返回一个长实线http://pastebin.com/dtp7QNbs -有任何标记之间没有空格或者回车,但空间出现在浏览器-识别在检查元素工具,因为每个之间的空行<div class="component">
这是否有助于摆脱对这个问题做更多的光线?
我有同样的问题,并验证凯的解决方案来改变格式ANSI,但也发现,“编码为UTF-8无BOM”也适用。 这出来作为新的记事本++ PHP文件,因此少了一个转换步骤的默认格式。
这似乎通常不建议在UTF-8使用的字节顺序标记文件头的。 我核实,我的VS2010安装PHP保存文件时被添加BOM。
下面的文章计算器很好地说明了将多余的空格得到插入。
没有什么BOM是UTF-8和UTF-8之间有什么不同?
问题解决了! 这永远走上搞清楚。 简短的回答是,我的PHP文件是UTF-8编码。 在记事本中更改此++为ANSI固定它。
从那里“require_once”使用一个输出和一个地方的代码来代替手工粘贴 - 我只有这样做输出HTML的一个字符一个字符的比较中发现问题的真正原因。
在输出的视觉比较,都出现相同-相同的长度,没有多余的/不同的字符。 但是,当通过推preg_split('//', $string)
的字符,并通过循环性格,3个额外的“隐形”特征进行了在每次开始显露require_once
插入点。 我idenitified这些为ASCII字符ï
, »
和¿
(双点I,右字形和倒问号)。
改变了编码ANSI(我发现这一点的原因时,我重新在记事本中字对字的剧本之一,它没有遭受同样的问题),以及多余的线条也水涨船高。
多余的字符是BOM(字节顺序标记)。 所以在这里转换为UTF-8无BOM是真正的关键。 更多资讯: http://en.wikipedia.org/wiki/Byte_order_mark
首先,把<?php
在同一行DIV:
<div id="sidebar"><?php
这得到前摆脱空白search.php
。
然后确保search.php
有结尾没有换行符,这是造成的空白search.php
和categories.php
。 一些文本编辑器默认情况下,添加一个换行符,你可能需要重写此。
我只是尝试这样做,输出php main.php
是:
<div id="sidebar"><div class="component">
<!-- search.php -->
</div><div class="component">
<!-- categories.php -->
</div></div>
一段时间,它的发生是因为空格后?>
的类文件,也或之前<?php