這個讓我困擾了一會兒。比方說,我們有一個簡單的PHP文件:PHP在PHP /明文混合模式下吃掉換行
Line 0
Line 1
<?="Line 2"?>
Line 3
處理該文件將導致:
Line 0
Line 1
Line 2Line 3
哪裏?>
後改行去了?在結束標記後放置某個字符時,換行不會被吞噬(例如?>.
)。
有沒有辦法控制這種行爲?我不願意在結束標記之後放置空格,因爲我的IDE配置爲在換行之前刪除空格(並且我喜歡這種方式)。
這個讓我困擾了一會兒。比方說,我們有一個簡單的PHP文件:PHP在PHP /明文混合模式下吃掉換行
Line 0
Line 1
<?="Line 2"?>
Line 3
處理該文件將導致:
Line 0
Line 1
Line 2Line 3
哪裏?>
後改行去了?在結束標記後放置某個字符時,換行不會被吞噬(例如?>.
)。
有沒有辦法控制這種行爲?我不願意在結束標記之後放置空格,因爲我的IDE配置爲在換行之前刪除空格(並且我喜歡這種方式)。
是的,確實如下:
塊的結束標記將包含緊接着的尾隨換行符(如果存在的話)。
http://php.net/manual/en/language.basic-syntax.instruction-separation.php
含義,如果?>
是上線的最後一件事,換行符將被關閉PHP塊中移除。您需要明確echo
一個換行符或添加一個額外的換行符。
這種行爲對我來說沒有意義。爲什麼會有人想要這個?應該有辦法在某天關閉它: -/ –
@Felix有些代碼塊不會生成輸出,並且您不一定希望它們遍佈整個地方亂拋垃圾;說'<?php foreach($ foo as $ bar):?>'。是的,PHP所做的不是一個好的解決方案。 ERB for Ruby和其他人有*空格控制*,例如' - %>'('-'控制輸出或不輸出下面的換行/空格)。 PHP應該添加。 – deceze
除了<?php
和?>
標籤之外,PHP解釋器以HTML模式運行,HTML模式內部的間距不像文本內容那樣大。
用PHP生成文字,你應該使用普通字符串,建立自己的輸出以這種方式:
$var = "Line 2";
$s = "Line 0\nLine 1\n$var\nLine3";
至少這不會給你一個討厭的,但documented,驚喜:)
這個is actually a feature(相信與否)。 PHP消耗換行,如果它直接跟隨一個PHP閉標籤:
用於該塊的結束標記將包括立即尾隨 換行符如果存在。
這很清楚,這樣當一個空白行結尾的PHP文件在另一個腳本的include
d時不會在輸出中產生換行符。所以這是一個真正的「保護無知」特徵,我們必須在可預見的將來與之共存。
如果您確實需要換行符,還有其他選項:從簡單地將兩個換行符(第二行將工作!)從代碼中回顯換行符。
嘗試'<?=「第2行\ n」?>' –
請勿使用HTML模式生成文本文件;這是要求麻煩:) –
添加一個額外的換行符當然會起作用,但是我寧願使用PHP來節省我的第一個換行符。 –