PHP - wie erstelle ich einen Zeilenumbruch?


405

In PHP versuche ich, einen Zeilenumbruch zu erstellen:

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo '\r\n';

Danach öffne ich die erstellte Datei im Editor und sie schreibt die neue Zeile buchstäblich:

1 John Doe \ r \ n 1 John Doe \ r \ n 1 John Doe \ r \ n

Ich habe viele Variationen der ausprobiert \r\n, aber keine funktioniert. Warum verwandelt sich die Newline nicht in eine Newline?


Antworten:


638

Nur Zeichenfolgen in doppelten Anführungszeichen interpretieren die Escape-Sequenzen \rund \nals '0x0D' bzw. '0x0A'. Sie möchten also:

"\r\n"

Zeichenfolgen in einfachen Anführungszeichen kennen dagegen nur die Escape-Sequenzen \\und \'.

Wenn Sie also die Zeichenfolge in einfachen Anführungszeichen nicht mit einem Zeilenumbruch verknüpfen, der an anderer Stelle generiert wurde (z. B. mithilfe einer Zeichenfolge in doppelten Anführungszeichen "\r\n"oder mithilfe einer chrFunktion chr(0x0D).chr(0x0A) ), können Sie einen Zeilenumbruch innerhalb einer Zeichenfolge in einfachen Anführungszeichen nur mit Ihrem Editor eingeben:

$s = 'some text before the line break
some text after';

Überprüfen Sie Ihren Editor auf Zeilenumbrucheinstellungen, wenn Sie beispielsweise eine bestimmte Zeichenfolge benötigen \r\n.


1
@Pacerier Die einzige Möglichkeit, Wagenrücklauf und neue Zeilenzeichen in einer einzelnen Zeichenfolge in Anführungszeichen zu setzen, besteht darin, die Zeichen direkt über die Tastatur einzugeben (drücken Sie die Eingabetaste, abhängig von den Einstellungen Ihres Editors an den Zeilenenden). Andernfalls verwenden Sie einfach die Zeichenfolgenverkettung.
Gumbo

1
@Gumbo: Sie sagen, dass Zeichenfolgen in einfachen Anführungszeichen nur die Escape-Sequenzen \\ und \ 'kennen. Aber ich habe gerade eine Zeile mit Echo als <? Php echo 'Sie verwenden Internet Explorer. <br>' gedruckt. Echo 'Neue Zeile hinzugefügt'; ?> und die Ausgabe im Browser gesehen. Es wurde buchstäblich eine neue Zeile zwischen zwei Zeichenfolgen hinzugefügt, die ich angezeigt habe. Dies bedeutet, dass das Zeichen <br> oder <br/> in einem einfachen Anführungszeichen erweitert wird. Gibt es außer diesen drei noch andere solche HTML-Zeichen, die von PHP in den einfachen Anführungszeichen verstanden werden können? Ich bitte Sie, Ihre Antwort entsprechend zu aktualisieren. Vielen Dank.
PHPFan

1
@ user2839497 Was Sie sagen, macht keinen Sinn. Hier gibt es keinen Browserkontext. Und natürlich rendert der Browser eine neue Zeile, wenn er auf ein <br/> stößt. Und natürlich hindert Sie nichts daran, '<br/>' in eine einfache Zeichenfolge in Anführungszeichen zu setzen. Damit wird jedoch keine neue Zeile in einer einfachen Textdatei gerendert.
Fechter

1
@Pacerier Für eine Richtlinie in einfachen Anführungszeichen, anstatt die Zeichenfolge im Editor zu unterbrechen, wie Gumbo in seinem Kommentar vorgeschlagen hat, können Sie die andere Lösung in der Antwort von Gumbos verwenden, z. B. "Ausgabe einer neuen Zeile" .chr (0x0A). "In einer Zeichenfolge in einfachen Anführungszeichen '.
Fechter

2
Sie sollten PHP_EOLstattdessen verwenden
kurdtpage

234

Verwenden Sie die vordefinierte PHP_EOLKonstante:

echo $clientid, ' ', $lastname, PHP_EOL;

Der konstante Wert wird entsprechend den Zeilenenden des Betriebssystems festgelegt, auf dem PHP ausgeführt wird. Unter Linux wird es sein "\n"; unter Windows wird es sein "\r\n".


97

Der Befehl "echo" in PHP sendet die Ausgabe als unformatiertes HTML an den Browser. Selbst wenn der Browser sie in doppelte Anführungszeichen setzt, wird sie nicht in zwei Zeilen analysiert, da ein Zeilenumbruchzeichen in HTML nichts bedeutet. Deshalb müssen Sie entweder verwenden:

echo [output text]."<br>";

wenn Sie "echo" verwenden, oder verwenden Sie stattdessen fwrite ...

fwrite([output text]."\n");

Dadurch wird anstelle von "\ n" ein HTML-Zeilenumbruch ausgegeben.


4
Bei der Art und Weise, wie die Frage gestellt wird, ist es wahrscheinlich, dass er diese Daten entweder in ein Textfeld oder Javascript usw. zum Parsen oder Lesen von Klartext
ausgibt


23

Zeichenfolgen zwischen doppelten Anführungszeichen werden ""interpoliert, dh sie konvertieren maskierte Zeichen in druckbare Zeichen.

Zeichenfolgen zwischen einfachen Anführungszeichen ''sind wörtlich, dh sie werden genau so behandelt, wie die Zeichen eingegeben werden.

Sie können beide in derselben Zeile haben:

echo '$clientid $lastname ' . "\r\n";
echo "$clientid $lastname \r\n";

Ausgänge:

$clientid $lastname
1 John Doe

Ihre Erklärung zu den verschiedenen Arten von String-Notationen in PHP ist in Ordnung, da sie den Fehler des Frageautors zeigt. Ihr Codebeispiel liefert jedoch nicht das erwartete Ergebnis, da die Variablen in einer einfachen Zeichenfolge in Anführungszeichen verwendet werden und, wie Sie bereits erwähnt haben, nicht interpoliert werden!
Damien Flament

@ Damien Flament, das habe ich gesagt - der Inhalt zwischen einfachen Anführungszeichen wird nicht interpoliert, aber der Inhalt zwischen den doppelten Anführungszeichen. Vielleicht ist mein Beispiel verwirrend, weil Sie erwarten, dass der Inhalt von $ clientid und $ lastname anstelle der Literale "$ clientid" und "$ lastname" angezeigt wird. Ich denke, dies war die Überschrift einer Tabelle, die ich beim Debuggen verwendet habe. Die folgenden Zeilen wären gewesenecho "$clientid $lastname\r\n"
Kevin S. Miller

Wenn ich "das erwartete Ergebnis" schreibe, spreche ich über das Ergebnis, das der Fragesteller in seiner Frage erwartet hat. Das Hinzufügen des in Ihrem Kommentar angezeigten Codes zu Ihrer Antwort und das Anzeigen des Ergebnisses kann Ihre Antwortqualität verbessern.
Damien Flament


13

Ist eigentlich \r\nfür die HTML-Seite der Ausgabe. Mit diesen Zeichen können Sie einfach eine neue Zeile im HTML-Code erstellen, um die Lesbarkeit zu verbessern:

echo "<html>First line \r\n Second line</html>";

wird ausgegeben:

<html>First line
Second line</html>

Das Anzeigen der Seite ist:

First line Second line

Wenn Sie das wirklich so gemeint haben, müssen Sie nur das einfache Anführungszeichen mit dem "" Anführungszeichen korrigieren:

echo "\r\n";

Andernfalls , wenn Sie den Text zu teilen bedeuten, in unserem Beispiel ‚Erste Zeile‘ und ‚Zweite Zeile‘ müssen Sie den HTML - Code verwenden: <br />:

First line<br />Second line

das wird ausgegeben:

First line
Second line

Es wäre auch besser lesbar, wenn Sie das gesamte Skript durch Folgendes ersetzen würden:

echo "$clientid $lastname \r\n";

1
Nein, das sollte es nicht. Weil es meistens falsch ist. Der erste Codeblock wird wie First line Second linefolgt gerendert: Jedes Leerzeichen einschließlich Zeilenumbrüchen wird in der gerenderten Ausgabe auf ein Leerzeichen komprimiert. Auch </br>ist alles andere als gültiges HTML.
D_4_ni

1
Denken Sie auch daran, wenn Sie Text-E-Mails mit Ihrem PHP-Skript versenden, benötigen Sie weiterhin diese Zeilenenden anstelle von Unterbrechungen (<br>)
KennyV

9

w3school bot diesen Weg an:

echo nl2br("One line.\n Another line.");

Mit dieser Funktion können Sie es tun. Ich habe andere Methoden ausprobiert, die oben erwähnt wurden, aber sie helfen mir nicht.


Bei der Frage geht es nicht darum, eine Zeile innerhalb eines Absatzes in HTML zu unterbrechen. Es geht um den Newline-Charakter !
Damien Flament

Für den Kontext nl2br()konvertiert die Funktion Zeilenumbrüche in das <br />HTML-Tag. Dies kann nützlich sein, um eine neue Zeile auf Browserseiten zu erstellen, jedoch keine neue Zeile in Textdateien oder JavaScript, oder um auf dem Bildschirm oder der Konsole zu drucken.
SherylHohman

4

Aus irgendeinem Grund wird in jedem einzelnen Beitrag, in dem nach Zeilenumbrüchen in PHP gefragt wird, der Fall nicht erwähnt, dass das einfache Einfügen eines Zeilenumbruchs in Zeichenfolgen in einfachen Anführungszeichen genau das bewirkt, was Sie denken:

ex 1.

 echo 'foo\nbar';

In Beispiel 1 wird das gewünschte Ergebnis eindeutig nicht gedruckt. Es ist zwar richtig, dass Sie einem Zeilenumbruch in einfachen Anführungszeichen nicht entkommen können, Sie können jedoch eines haben:

ex 2.

 echo 'foo
 bar';

Beispiel 2 hat genau das gewünschte Verhalten. Leider ist die eingefügte neue Zeile betriebssystemabhängig. Dies ist normalerweise kein Problem, da Webbrowser / Server die neue Zeile korrekt interpretieren, unabhängig davon, ob es sich um \ r, \ r \ n oder \ n handelt.

Offensichtlich ist diese Lösung nicht ideal, wenn Sie die Datei auf andere Weise als über einen Webbrowser und auf mehrere Betriebssysteme verteilen möchten. In diesem Fall sollten Sie eine der anderen Antworten sehen.

Hinweis: Mit einem Rich-Text-Editor mit Funktionen sollten Sie in der Lage sein, eine neue Zeile als Binärzeichen einzufügen, die eine neue Zeile auf einem anderen Betriebssystem als demjenigen darstellen, das die Datei bearbeitet. Wenn alles andere fehlschlägt, reicht es aus, einfach einen Hex-Editor zum Einfügen des binären ASCII-Zeichens zu verwenden.


3

Verwenden Sie das PHP nl2br, um die Zeilenumbrüche in einer Textzeichenfolge abzurufen.

$ text = "Manu ist ein guter Junge. (Enter) Er kann gut codieren.

echo nl2br ($ text);

Ergebnis.

Manu ist ein guter Junge.

Er kann gut codieren.


1
Die nl2brFunktion konvertiert Zeilenumbrüche in das <br />HTML-Tag. Wenn die Zeichenfolge kein Zeilenumbruchzeichen enthält, führt diese Funktion nichts aus! Darüber hinaus geht es nicht darum, eine Zeile innerhalb eines Absatzes in HTML zu unterbrechen. Es geht um den Newline-Charakter !
Damien Flament

2

Ich habe diese Kombination auch sowohl in einfachen als auch in doppelten Anführungszeichen ausprobiert. Aber keiner hat funktioniert. Anstatt eine \nbessere Verwendung <br/>in doppelten Anführungszeichen zu verwenden. So was..

$variable = "and";
echo "part 1 $variable part 2<br/>";
echo "part 1 ".$variable." part 2";

Bei der Frage geht es nicht darum, eine Zeile innerhalb eines Absatzes in HTML zu unterbrechen. Es geht um den Newline-Charakter !
Damien Flament

2

Verwenden Sie chr (13) für den Wagenrücklauf und chr (10) für die neue Zeile

echo $clientid;
echo ' ';
echo $lastname;
echo ' ';
echo chr (13). chr (10);

2

Für alle Echoanweisungen verwende ich immer <br>doppelte Anführungszeichen.


2
Bei der Frage geht es nicht darum, eine Zeile innerhalb eines Absatzes in HTML zu unterbrechen. Es geht um den Newline-Charakter !
Damien Flament

1

Nichts hat für mich funktioniert.

PHP_EOL

. "\r\n";

$NEWLINE_RE = '/(\r\n)|\r|\n/'; // take care of all possible newline-encodings in input file
$var = preg_replace($NEWLINE_RE,'', $var);

Funktioniert bei mir:

$admin_email_Body = $admin_mail_body .'<br>' ."\r\n";
$admin_email_Body .= 'This is line 2 <br>' ."\r\n";
$admin_email_Body .= 'This is line 3 <br>' ."\r\n";

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.