2013-01-23 8 views
6

Ten mi przeszkadza na chwilę. Powiedzmy, że mamy proste PHP-File:PHP zjada linefeed w trybie mieszanym php/tekstem jawnym

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

tworzenie tego pliku spowoduje:

Line 0 
Line 1 
Line 2Line 3 

Skąd RSS linia po ?> iść? Podawanie linii nie jest pochłaniane podczas umieszczania znaku po tagu zamykającym (na przykład ?>.).

Czy istnieje sposób kontrolowania tego zachowania? Nie chcę umieszczać białych znaków po tagu zamykającym, ponieważ mój IDE jest skonfigurowany tak, aby usuwać białe spacje przed wierszami (i lubię to w ten sposób).

+0

Wypróbuj '' –

+1

Nie używaj trybu HTML do generowania plików tekstowych; to jest proszenie o kłopoty :) –

+0

Oczywiście dodanie dodatkowej linii byłoby skuteczne, ale wolałbym, żeby PHP oszczędził mój pierwszy. –

Odpowiedz

5

Tak, istotnie:

Znacznik zamykający dla bloku będzie zawierał natychmiastowy znak nowej linii, jeśli jest obecny.

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

znaczenie, jeśli ?> jest ostatnią rzeczą, na linii, znak nowej linii zostaną usunięte w ramach bloku zamknięcia PHP. Musisz jawnie echo wprowadzić nową linię lub dodać dodatkowy znak nowej linii.

+0

To zachowanie nie ma dla mnie sensu. Dlaczego ktoś miałby chcieć tego?Powinien być jakiś sposób na wyłączenie go pewnego dnia: -/ –

+1

@Felix Niektóre bloki kodu nie wytwarzają danych wyjściowych, a ty niekoniecznie chcesz, żeby zaśmiecały znaki nowej linii w każdym miejscu; powiedz ''. Tak, to, co robi PHP, nie jest świetnym rozwiązaniem. ERB dla Rubiego i innych ma * kontrolę spacji *, np. '-%>' ('-' steruje wyjściem lub nie-wypisem kolejnych znaków/białych znaków). PHP powinno to dodać. – deceze

1

Poza znacznikami <?php i ?>, interpreter PHP działa w trybie HTML, a spacjowanie w trybie HTML jest mniej problematyczne niż w przypadku treści tekstowych.

Aby wygenerować tekst PHP należy użyć zwykłego ciągi i budować swoją moc w ten sposób:

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

Przynajmniej ten nie daje paskudny, choć documented, niespodzianka :)

4

To jest is actually a feature (proszę lub nie). PHP zużywa wysuw jeśli bezpośrednio następuje PHP bliskie Tag:

Znacznik zamykający dla bloku będzie zawierać natychmiast spływu nowej linii, jeśli jest obecny.

Zostało to wyraźnie umieścić w taki sposób, że plik PHP kończąc pustej linii nie spowoduje nowa linia występuje na wyjściu gdy include d z innego skryptu. Tak naprawdę jest to funkcja "chroń ignoranta" od dawnych czasów, z którymi musimy żyć w przewidywalnej przyszłości.

Jeśli naprawdę chcesz nową linię, istnieją inne opcje: po prostu wstawienie dwóch znaków nowej linii po zamykającym tagu (drugi zadziała!), Aby wywołać echo znaku nowej linii z kodu.

Powiązane problemy