webentwicklung-frage-antwort-db.com.de

PHP Echo Line Breaks

Was ist der Unterschied zwischen\n und\r (ich weiß, dass es etwas mit dem Betriebssystem zu tun hat) und wie kann ein Zeilenumbruch, der plattformübergreifend funktioniert, am besten wiedergegeben werden?

EDIT: Als Antwort auf Jarod verwende ich ths, um einen Zeilenumbruch in einer TXT-Protokolldatei wiederzugeben, obwohl ich sicher bin, dass ich ihn in Zukunft für Dinge wie verwenden werde HTML-Makup auf einer Seite wiedergeben.

42
PHLAK
  • \n ist ein Linux/Unix-Zeilenumbruch.
  • \r ist ein klassischer Zeilenumbruch unter Mac OS (nicht unter OS X). Mac OS X verwendet das oben genannte Unix \n.
  • \r\n ist ein Windows-Zeilenumbruch.

Ich benutze normalerweise nur \n Auf unseren Linux-Systemen und den meisten Windows-Apps ist das sowieso in Ordnung.

45
Jarod Elliott

Verwenden Sie die PHP_EOL Konstante, die automatisch auf den richtigen Zeilenumbruch für das Betriebssystem eingestellt wird, auf dem das Skript PHP ausgeführt wird.

Beachten Sie, dass diese Konstante seit PHP 5.0.2.

<?php
    echo "Line 1" . PHP_EOL . "Line 2";
?>

Aus Gründen der Abwärtskompatibilität:

if (!defined('PHP_EOL')) {
    switch (strtoupper(substr(PHP_OS, 0, 3))) {
        // Windows
        case 'WIN':
            define('PHP_EOL', "\r\n");
            break;

        // Mac
        case 'DAR':
            define('PHP_EOL', "\r");
            break;

        // Unix
        default:
            define('PHP_EOL', "\n");
    }
}
123
Andrew Moore

Jarods Antwort enthält die korrekte Verwendung von\r\n auf verschiedenen Betriebssystemen. Hier ist etwas Geschichte:

  • \ r oder das Zeichen ASCII mit dem Dezimalcode 13 wird nach "Wagenrücklauf" als CR bezeichnet.
  • \ n oder das Zeichen ASCII mit dem Dezimalcode 10 heißt "newline" oder LF nach "line feed".

Die Terminologie "Wagenrücklauf" und "Zeilenvorschub" stammt aus der Zeit, als Teletypen anstelle von Terminals mit Monitor und Tastatur verwendet wurden. In Bezug auf Teletypen oder Schreibmaschinen bedeutete "Wagenrücklauf", den Cursor zu bewegen und zur ersten Textspalte zurückzukehren, während "Zeilenvorschub" bedeutete, die Walze zu drehen, um in die folgende Zeile zu gelangen. Zu dieser Zeit machte die Unterscheidung Sinn. Heutzutage sind die Kombinationen\n,\r,\r\n, die das Ende einer Textzeile darstellen, völlig willkürlich.

31

Für PHP_EOL unter PHP4 ist keine Abwärtskompatibilität erforderlich.

Die Aussage von Moore zur konstanten Verfügbarkeit von PHP_EOL muss korrigiert werden: "... wird deklariert seit PHP 5.0.2.".

Nein, es gibt es seit PHP 4.3.10. Jeder, der noch etwas weniger als das betreibt, sollte sowieso nicht im Geschäft sein. Ab heute sollte niemand weniger als PHP 5 verwenden!

Aus dem PHP Handbuch: "PHP_EOL Das richtige 'End Of Line'-Symbol für diese Plattform. Verfügbar seit PHP 4.3.10 und PHP 5.0 .2 ".

7
Chris Kunze