PHP 在 require 上添加额外的空格

问题描述 投票:0回答:7

考虑以下代码:

<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">

之间的空行

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

php whitespace require-once
7个回答
5
投票

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

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

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

utf-8和utf-8无BOM有什么区别?


2
投票

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

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

在输出的视觉比较中,两者看起来相同 - 长度相同,没有额外/不同的字符。但是,当推入

preg_split('//', $string)
并逐个字符循环时,在每个
require_once
插入点的开头会显示 3 个额外的“不可见”字符。我将它们识别为 ASCII 字符
&#239;
&#187;
&#191;
(双点 i、右 V 形和倒置问号)。

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


2
投票

额外的字符是BOM(字节顺序标记)。因此,转换为无 BOM 的 UTF-8 才是真正的技巧。更多信息在这里:http://en.wikipedia.org/wiki/Byte_order_mark


2
投票

有时会发生这种情况,因为类文件中

?>
之后、
<?php

之前或之前有空格

1
投票

在程序员的记事本编辑器中使用以下方法可以轻松将 PHP 文件另存为 UTF-8,不带标记符号

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

之后

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


0
投票

首先,将

<?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>

0
投票

同样的问题,我的解决方法是更正目录... 从

include_once 'connection.php';
include_once './connection/connection.php';

© www.soinside.com 2019 - 2024. All rights reserved.