2010-06-10 9 views
22

Aus irgendeinem Grund, den ich nicht \n können einen Zeilenvorschub erstellen, wenn eine Datei mit PHP ausgibt. Es schreibt einfach "\n" in die Datei. Ich habe versucht, auch "\\n" zu verwenden, wo es einfach "\ n" schreibt (wie erwartet). Aber ich kann nicht für mein Leben herausfinden, warum das Hinzufügen von \ n zu meinen Strings keine neuen Zeilen erzeugt. Ich habe auch versucht \r\n, aber es fügt nur "\r\n" an die Zeile in der Datei an.PHP Zeilenvorschübe ( n) funktioniert nicht

Beispiel:

error_log('test\n', 3, 'error.log'); 
error_log('test2\n', 3, 'error.log'); 

Ausgänge:

test\ntest2\n 

Mit MAMP auf OSX, falls das zählt (eine Art von PHP-Konfigurations Sache vielleicht?).

Irgendwelche Vorschläge?

Antwort

42

Verwenden doppelte Anführungszeichen. "test\n" wird gut funktionieren.

Wenn die Zeichenfolge in doppelte Anführungszeichen eingeschlossen ist ("), wird PHP für Sonderzeichen mehr Escape-Sequenzen interpretieren.

http://php.net/manual/en/language.types.string.php

+0

Bei Verwendung von einfachen Anführungszeichen wird der Wert nicht in Entitäten geändert, daher müssen Sie double verwenden! +1 – RobertPitt

+5

Wie können Sie eine vollständige Antwort in weniger als 2 Minuten geben? Das ist die Zeit, die ich brauche, um die Frage allein zu lesen! : o – cregox

2

Es ist, weil Sie Apostrophe verwenden (') Einsatz Anführungszeichen (") stattdessen. 'fordert PHP auf, das, was zwischen den Apostrophen steht, wörtlich zu verwenden.

3

Sie müssen doppelte Anführungszeichen verwenden. Doppelte Anführungszeichen haben mehr Escape-Zeichen.

error_log("test\n", 3, 'error.log'); 
error_log("test2\n", 3, 'error.log'); 
2

Doppelzitate sind was Sie wollen. Einfache Anführungszeichen ignorieren die \ Escape. Doppelte Anführungszeichen werten auch variable Ausdrücke für Sie aus.

prüfen this page in der PHP-Handbuch für mehr.

5

Ich bin mir ziemlich sicher, dass Sie auf eine HTML-Datei ausgeben. Das Problem ist, html Zeilenumbrüchen Quelle ignoriert, die bedeutet, dass Sie die Zeilenumbrüche mit <br/> ersetzen, wenn Sie eine neue Zeile in der Ergebnisseite angezeigt werden sollen.

21

\n soll nicht als neue Zeile vom Endbenutzer gesehen werden, Sie müssen das HTML <br/> Element dafür verwenden. /n beeinflusst nur, wie das HTML, das von PHP generiert wird, im Quellcode der Webseite erscheint. Wenn Sie auf Ihre Webseite gehen und auf 'Quelle anzeigen' klicken, sehen Sie php-generiertes HTML als eine lange Zeile. Nicht hübsch. Das ist, was \n für ist; zu brechen, dass PHP-generierte HTML in kürzere Zeilen. Der Zweck von \n ist es, eine schönere "View Source" Seite zu erstellen.

+0

Ich würde das als Antwort akzeptieren! – mok

+0

Warum zielt es auf die Seite 'Quelle anzeigen' statt auf die Ausgabe der Webseite? –

1

die \n in doppelten Anführungszeichen


$LOG = str_replace('\n', "\n", $LOG); 
3

nl2br() Verwendung Funktion versuchen, Platz für

neue Linie erstellen
echo nl2br("Welcome\r\n This is my HTML document", false); 

Das obige Beispiel Ausgang:


Willkommen Diese ist mein HTML-Dokument

5

Wenn Sie ein PHP-Skript in einem Browser ausführen, wird es standardmäßig als HTML gerendert. Wenn die von Ihnen verwendeten Bücher anders angezeigt werden, ist entweder der Code oder die Abbildung ungenau. Sie können "Quelle anzeigen" verwenden, um anzuzeigen, was an den Browser gesendet wurde, und Sie sehen, dass Ihre Zeilenvorschübe vorhanden sind.

<?php 
echo "Line 1\nLine 2"; 
?> 

Dies wird wie in Ihrem Browser machen:

<?php 
header('Content-type: text/plain'); 
echo "Line 1\nLine 2"; 
?> 

erhalten Sie folgende Ausgabe:

Line 1 Line 2 

Wenn Sie Klartext zu Ihrem Browser senden müssen, können Sie so etwas wie verwenden können:

Line 1 
Line 2 
0

Wenn Sie wollen so etwas wie dies mit einem Newline (\ n), nachdem es drucken:

<p id = "theyateme">Did it get eaten?</p> 

die oben drucken möchten, sollten Sie dies tun:

<?php 
    print('<p id = "theyateme">Did it get eaten?</p>' . "\n"); 
?> 

Der Client-Code von oben wäre:

<p id = "theyateme">Did it get eaten?</p> 

Die Ausgabe von oben wäre:

Hat es gefressen?

Ich weiß, es ist schwer, aber ich immer tun es auf diese Weise, und Siefast immer haben es auf diese Weise zu tun.

Manchmal möchten Sie PHP \ n auf die Seite drucken, anstatt einen Zeilenumbruch zu geben, wie in JavaScript-Code (generiert von PHP).

HINWEIS zur Antwort: Sie könnten sein wie: Warum haben Sie drucken statt Echo (ich mag mein Echo). Das liegt daran, dass ich print over echo und printf bevorzuge, weil es in manchen Fällen besser funktioniert (in der Regel meine Fälle), aber in diesem Fall kann es gut mit echo gemacht werden.