2011-08-10 94 views
4

(PHP 5.3.6)PHP包括原因不需要換行

我有一個PHP文件,其中包含只是這段文字 - 沒有PHP的標籤,沒有尾隨換行符或多餘的空白的任何地方:

<div style="border:1px solid green">abc</div> 

現在,包括從另一個PHP文件如下所示(再次,沒有多餘的空白的任何地方):

<div style="border:1px solid red"><?php include "abc.php" ?></div> 
<br /> 
<div style="border:1px solid red"><div style="border:1px solid green">abc</div></div> 

我得到下面的結果。

注意,第二方法只是直接使用包含的內容。這些都應該像下面那樣,但是正如你所看到的那樣,include會在被包含文件的內容之前插入一些更爲奇妙的換行符。我說「奇怪」,因爲當我檢查的輸出源(通過Chrome瀏覽器的查看源代碼)並沒有什麼明顯的有:

enter image description here

當Chrome的元素檢查顯示在頁面的這一部分,似乎有東西有,但它到底是什麼我也說不清:

enter image description here

這似乎是簡單的一個空字符串,但爲什麼一個空字符串會導致新行,爲什麼它會在那裏擺在首位是一個謎。在include語句的末尾添加分號並沒有什麼區別。我想到它可能是一個空字節或一個13(CR),但這應該不會導致HTML換行符。

有誰知道我可以擺脫這不需要的換行符?

回答

14

檢查包含的abc.php的編碼 - 它是否有一個字節順序標記(BOM)?如果是這樣,請將其刪除(好的代碼編輯器允許您在保存對話框中更改文件編碼),這可能是罪魁禍首。

+3

mmmm ....知道你做的php。謝謝! – iforce2d

+0

非常感謝你! BOM的東西是如此邪惡...... –

0

依靠Chrome檢查器檢查原始輸出並不是一個好主意,因爲樹已格式化。使用顯示源略好。

這很可能與include()本身無關。第一步是用十六進制編輯器打開包含的文件,然後檢查它是否爲確實是爲空。正如延斯羅蘭指出的那樣,它可以包含一個例如BOM,這將被大多數文本編輯器隱藏。

您還可以生成原始abc.php文件與此代碼,並對它進行測試代碼:

file_put_contents('abc.php', 'abc'); 
+1

是的,BOM是問題所在。爲了記錄,我使用Notepad ++保存爲「無UTF-8編碼」。 – iforce2d

0

我在同樣的問題。我在編輯器中發現了這個問題。請使用記事本或文本編輯器編輯並保存您的收錄文件。你會看到變化。