2013-02-11 139 views
1

考慮下面的代碼:PHP增加了額外的空格上需要

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

search.phpcategory.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">

這是否有助於揭示這個問題?

+0

之前,我高度懷疑'require_once'被添加空格。您應該查看正在包含的文件,並查看最後是否有任何結尾。 – Kermit 2013-02-11 15:37:52

+0

將'require'語句放在一行中:'<?php require_once('/ components/search.php'); require_once( '/部件/ categories.php'); ?>並在關閉PHP標記後刪除任何尾隨空格。 – BenM 2013-02-11 15:38:02

+1

刪除每個包含文件末尾的?> – 2013-02-11 15:38:03

回答

2

問題解決了!這花了很長時間才弄清楚。簡短的回答是我的php文件是UTF-8編碼的。在Notepad ++中將其更改爲ANSI可以修復它。

我只通過對輸出HTML進行逐字符比較發現問題的真正原因 - 使用'require_once'的地方的一個輸出,以及代碼手動粘貼到位的地方。

在一個視覺比較的輸出,都顯示相同 - 長度相同,沒有額外/不同的字符。但是當穿過preg_split('//', $string)並且逐個字符地循環時,在每個require_once插入點的開始處顯露出3個額外的「不可見」字符。我將它們識別爲ASCII字符&#239;,&#187;&#191;(雙點i,右人字形和倒置問號)。

將編碼更改爲ANSI(我發現這是因爲當我在記事本中逐字重新創建其中一個腳本時,它沒有遭遇同樣的問題),並且多餘的線條消失了。

0

首先,把<?php在同一行DIV:

<div id="sidebar"><?php 

這被search.php之前擺脫空白。

然後確保search.php末尾沒有換行符,這導致了search.phpcategories.php之間的空格。有些文本編輯器默認添加了一個尾隨的換行符,您可能需要重寫這個。

我只是想這一點,php main.php輸出爲:

<div id="sidebar"><div class="component"> 
<!-- search.php --> 
</div><div class="component"> 
<!-- categories.php --> 
</div></div> 
+0

試過這個,(見最後一段)。目前爲止我還沒有看到任何尾隨的空格 - 文件是用Notepad ++編寫的,在記事本中檢查過,沒有額外的空間可供查找 – Kai 2013-02-11 16:12:33

+0

適用於我,請參閱更新。 – Barmar 2013-02-11 16:18:24

+0

我在Mac上使用Emacs,並在寫入文件之前將'require-final-newline'設置爲零。不知道如何在Notepad ++中執行此操作。 – Barmar 2013-02-11 16:20:15

3

我有同樣的問題,並驗證Kai的解決方案,以將格式更改爲ANSI,但也發現「編碼UTF-8沒有BOM」也適用。 這是作爲新的Notepad ++ PHP文件的默認格式,因此減少了轉換步驟。

似乎通常不推薦在UTF-8中使用字節順序標記文件頭。我確認我的VS2010安裝在保存PHP文件時添加了BOM。

下面的stackoverflow文章很好地解釋了額外的空白插入的地方。

What's different between utf-8 and utf-8 without BOM?

0

一段時間,它的發生是因爲白色的空間?>後的類文件,也或<?php

+1

是的你是對的,我不知道爲什麼有人給你打了個電話。我花了很長一段時間想知道我的項目的一部分來自哪裏。我已經發送了頭文件,並且有空白處被打破。原來在關閉後有空格?>在我包含的文件中 - 甚至是文檔提示。那謝謝啦 ! – Rog 2017-07-03 01:19:58