[PHP] Zeilenumbruch erkennen?

Azador

PHP Bastler
ID: 108964
L
9 Mai 2006
70
4
Hi Leute!

Hab ne Frage: Ich habe in einer SQL-DB per phpMyAdmin ein paar Zeilen in eine "Text"-Zelle geschrieben. Nun möchte ich, dass jede Zeile als Listen-Element <li>...</li> in HTML ausgegeben wird.

Ich hab's auch mit folgendem Code hinbekommen:
PHP:
$tempo = explode( '
', $row['inhalt'] );

foreach ( $tempo as $value )
{
  $inhalt .= '<li>' . $value . '</li>' . "\n";
}
Aber das ging nur, indem ich auch im Quellcode selbst einen Zeilenumbruch (bei explode) gesetzt habe. Irgendwie nicht sehr elegant. Ich hab's auch schon mit
PHP:
$tempo = explode( '\r', $row['inhalt'] );
ODER
$tempo = explode( '\n', $row['inhalt'] );
ODER
$tempo = explode( '\r\n', $row['inhalt'] );
probiert. Das funktioniert allerdings nicht. Ausgegeben wird dann
"- Zeile 1Zeile 2Zeile 3"
anstatt
"- Zeile 1
- Zeile 2
- Zeile 3".

Weiß jemand welches Zeichen für einen Zeilenumbruch in einem Textfeld (textarea) steht?
 
\r für Mac, \n für Unix und \r\n für Windows. Das is schon korrekt.

Beachte allerdings: In Single-Quotes werden die obigen Escape-Sequenzen nicht geparst, d.h. das bleibt \r, \n und \r\n, nix Zeilenumbrüche.

Damit's funktioniert, musst du normale Anführungszeichen verwenden, dass das auch wirklich als die entsprechenden Umbrüche behandelt wird.
 
Das ist mal ne interessante Tatsache, da es in C/C++ genau anders herum ist. Ein '\n' wird als ein Zeichen (als Zeilenumbruch) betrachtet "\n" hingegen als 2 Zeichen.
 
In C wird ein einzelner Character doch auch durch Ticks markiert, während Strings durch Quotes markiert werden. Der Compiler dürfte bei mehr als einem Zeichen innerhalb von Ticks schon meckern. Hat mich anfangs auch gewundert, aber man gewöhnt sich dran. ;)
 
Das ist mal ne interessante Tatsache, da es in C/C++ genau anders herum ist.
In C ist es nicht "anders herum", sondern ganz anders.

Ein Single-Quote bedeutet hier, dass es sich um einen char handelt, also nur um ein Zeichen. Anführungszeichen geben einen String (char* = char-Zeiger) an.

Wenn du also im C-Code 'A' stehen hast, codiert der Compiler das Datum 65 fest in den Code ein. Bei der Assemblierung ergebe ein
PHP:
register int a;
/* ... */
a += 'A';
etwa sowas
Code:
addl %eax, $65 ; immediat operand
Schreibst du hingegen ein "A", so wird die Zeichenkette "A", hex 41 00 (beachte: Nullzeichen) irgendwo im Text-Segment platziert und beim Zugriff die Adresse dieser (32bit normalerweise) als Operand verwendet.
Code:
0x000124f0 ff ff ff ff 41 00 ff ff ...
Beim Zugriff auf den String würde das "A" durch z.B. 0x000124f4 ersetzt werden.

Kann man also mit PHP nicht vergleichen. PHP hat als Semantik für Double- vs. Single-Quotes Parsen inside des Strings und nicht-Parsen .