2013-01-23 10 views
6

Questo mi dà fastidio per un po '. Diciamo che abbiamo una semplice PHP-File:PHP mangia linefeed in modalità mista php/testo in chiaro

Line 0 
Line 1 
<?="Line 2"?> 
Line 3 

elaborato questo file si tradurrà in:

Line 0 
Line 1 
Line 2Line 3 

Dov'è finito l'avanzamento riga dopo ?> andare? Il linefeed non viene divorato quando si posiziona un carattere dopo il tag di chiusura (ad esempio ?>.).

C'è un modo per controllare questo comportamento? Non sono disposto a inserire spazi bianchi dopo il tag di chiusura, perché il mio IDE è configurato per rimuovere gli spazi bianchi prima dei linefeed (e mi piace in questo modo).

+0

Provare '' –

+1

Non utilizzare la modalità HTML per generare file di testo; quello sta chiedendo guai :) –

+0

L'aggiunta di un linefeed aggiuntivo funzionerebbe certamente, ma preferirei che PHP risparmiasse il mio primo. –

risposta

5

Sì, infatti:

Il tag di chiusura per il blocco includerà la riga finale immediatamente finale se presente.

http://php.net/manual/en/language.basic-syntax.instruction-separation.php

significato, se il ?> è l'ultima cosa sulla linea, la nuova riga verrà rimosso come parte del blocco di chiusura PHP. È necessario esplicitamente echo una nuova riga o aggiungere una nuova riga aggiuntiva.

+0

Questo comportamento non ha senso per me. Perché qualcuno dovrebbe volerlo?Ci dovrebbe essere un modo per spegnerlo un giorno: -/ –

+1

@Felix Alcuni blocchi di codice non producono output, e non è detto che si vogliano ricollocare le newline dappertutto; dite ''. Sì, ciò che PHP fa non è una grande soluzione. ERB per Ruby e altri hanno * controllo degli spazi bianchi *, ad es. '-%>' ('-' controlla l'output o non-output delle seguenti newline/spazi bianchi). PHP dovrebbe aggiungerlo. – deceze

1

Al di fuori dei tag <?php e ?>, l'interprete PHP funziona in modalità HTML e la spaziatura all'interno della modalità HTML è meno di un problema che non per i contenuti di testo.

per generare testo con PHP si dovrebbe usare le stringhe di pianura e costruire la vostra uscita in questo modo:

$var = "Line 2"; 
$s = "Line 0\nLine 1\n$var\nLine3"; 

Almeno questo non vi darà un brutto, però documented, sorpresa :)

4

Questo is actually a feature (credici o no). PHP consuma un avanzamento se segue direttamente un PHP tag di chiusura:

Il tag di chiusura del blocco comprenderà immediatamente posteriore fine riga se presente.

Questo è stato chiaramente messo in modo che un file PHP che termina con una riga vuota non provocherebbe un ritorno a capo a verificarsi in uscita quando include d da un altro script. Quindi è davvero una funzione di "protezione dell'ignorante" dei vecchi tempi con cui dobbiamo convivere per il futuro prevedibile.

Se davvero si vuole il ritorno a capo ci sono altre opzioni: dalla semplice messa in due a capo dopo il tag di chiusura (il secondo lavorerà!) Per riecheggiando una nuova riga dal codice.

Problemi correlati