dedlfix: Jetzt noch das Newline-Problem

Beitrag lesen

Tach!

Ich habe nach wie vor Probleme mit dem Zeilenwechselzeichen.
define ('NL', "\r\n"); bzw. define ('NL', "\n"); definieren ja den Zeilenwechsel.

Nö, die definieren die Konstante NL, mal mit Windows- mal mit Unix-Zeilenumbruch als Inhalt.

Aber diese Definition gilt auch für alle aufgerufenen Routinen.

Nö, sie gilt für nichts. Es ist eine Konstante, die man verwenden kann oder auch nicht. Konstanten sind jedoch sozusagen superglobal, also wie beispielsweise $_GET und $_POST ohne weiteres Zutun überall verfügbar.

Nun benötige ich wenn ich HTML erzeuge <br> als Zeilenwechsel.
Ich habe daher das Zeilenwechselzeichen mit der Variablen $NL definiert,
einmal als
$NL="<br>";    -- akzeptiert
und einmal als
$NL=0x0D0x0A;  -- Formaler Fehler

0x0D ist ein Literal für eine Zahl in Hexdarstellung. Zwei solche aneinandergereiht ergibt keinen Sinn. Das wäre quasi wie 42 und 23 ohne Operator hintereinandergeschrieben, wenn das nicht als eine einzige Zahl (4223) aufgefasst würde. Hex-Zahlen fangen mit 0x an und dann folgen beliebig viele Ziffern 0-9 und a-f (Großbuchstaben für X und A-F sind auch zulässig). Du hast da 0x0D0 notiert und dann kommt ein x, was ein Syntaxfehler ist. Richtig wäre 0x0D0A. Aber das nützt dir nichts, weil dadurch nur die Zahl 3338 entsteht und kein String (var_dump($NL)). Wenn du diese Zahl in einen Stringkontext bringst, macht PHP seine automatische Typumwandlung von Zahl nach String und im String stehten dann die Zeichen '3338' und kein Zeilenumbruch.

bzw.
$NL=0x0A;

Daselbe in Grün, nur mit richtiger Hex-Zahlen-Syntax.

Wenn ich dann im letzten Fall "aaaaaa" . $NL . "bbbbbb" in eine Datei schreibe, so erscheint dort aaaaa10bbbbb.

Du könntest die Konstante NL statt der Variable $NL nehmen. Der Inhalt von $NL soll sich doch sicherlich nicht ändern, also ist eine Konstante semantisch besser als eine Variable. (Variablen lassen sich zwar einfacher in "Strings $NL notieren", sind aber nur Scope-abhängig verfügbar.)

Wie muss ich das Newlinezeichen (\r\ bzw \n in einer Variablen definieren?

Wenn du String unter Angabe des (ASCII-)Codes eines Zeichens erzeugen möchtest, musst du einen String anfangen und darin die Escape-Sequenz für hexadezimal notierte Zeichen-Codes nehmen: Strings - double quoted. Einfacher ist es aber so wie bei der Konstantendefinition, als \r\n innerhalb eines String-Literals.

dedlfix.