MySQL gibt Zeilenumbruch aus den ich mit nl2br nicht ersetzten k
Peter
- datenbank
Hallo,
ich habe eine MySQK DB mit einer tabelle in der es eine Spalte "meinText" (type text, Zeichensatz:UTF-8 Unicode (utf8)) gibt.
Die Inhalte (u.a.) dieser Spalte lese ich mit php aus, übergebe sie per ajax an ein JavaScript auf der Broweserseite und stelle sie dann in einer Tabelle dar.
Das ganze geht aber nicht mehr wenn sich in der Tabelle ein Text mit einem zeilenumbruch befindet. Dieser wird dan offenbar _als_Zeilenumbruch_ in den JSON String meiner ajax Sache eingebaut und erzeigt ein "unterminated strin literal" error.
Ich dachet nun das könnte ich mit "$text= nl2br($text);" lösen, zeigt aber keinen Effekt. Dann habe ich es mit "$tetx= str_replace('\n', '<br>', $text);" versucht. Auch ohnen Wirkung.
nachdem "$tetx= str_replace('\n', 'HierSollteEinZeilenumbruch', $text);" den $text auch unverändert ließ denke ich mir, dass die DB als Zeilenumbruch kein "\n" liefert. "\r" habe ich auch schon probiert, ohne Wirkung.
Auch ja, die DB Abfrage per PHP sieht so aus:
$query = "SELECT text, ... FROM meinetabelle ORDER BY id";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
...
}
Danke für Hilfe, Peter
n'abend,
Das ganze geht aber nicht mehr wenn sich in der Tabelle ein Text mit einem zeilenumbruch befindet. Dieser wird dan offenbar _als_Zeilenumbruch_ in den JSON String meiner ajax Sache eingebaut und erzeigt ein "unterminated strin literal" error.
ist dir json_encode() bekannt? Wenn das Modul bei dir verfügbar ist, wird das dein JSON-Leben ungemein vereinfachen ;)
Ich dachet nun das könnte ich mit "$text= nl2br($text);" lösen, zeigt aber keinen Effekt.
nl2br() macht aus einem "\n" ein "<br />\n". Der Zeilenumbruch wird dadurch also nicht ersetzt, sondern lediglich um einen HTML-Zeilenumbruch ergänzt. In der Doku steht schließlich »Fügt vor allen Zeilenumbrüchen eines Strings HTML-Zeilenumbrüche ein« und nicht »Ersetzt alle Zeilenumbrüche...«
Dann habe ich es mit "$tetx= str_replace('\n', '<br>', $text);" versucht. Auch ohnen Wirkung.
Der Unterschied zwischen SingleQuotes ' und DoubleQuotes " scheint dir noch nicht bekannt zu sein. Text, der in SingleQuotes steht, wird exakt so weiterverwendet. Text, der in DoubleQuotes steht, wird erst noch durch den StringParserBums™ gejagt. Kurz: '\n' === "\\n" - also eben nicht "Zeilenumbruch", sondern "escaped Zeilenumbruch". Ersetze die SingleQuotes durch DoubleQuotes und du wirst glücklich.
nachdem "$tetx= str_replace('\n', 'HierSollteEinZeilenumbruch', $text);" den $text auch unverändert ließ denke ich mir, dass die DB als Zeilenumbruch kein "\n" liefert. "\r" habe ich auch schon probiert, ohne Wirkung.
Das ist relativ unwahrscheinlich. Soweit ich mich erinnere wurde ein einzelnes \r lediglich von Apple in den Jahren um Christi Geburt verwendet, also damals, als Mac OS noch kein X hatte. Die Linux-Welt sieht \n als das Zeilenumbruch-Steuerzeichen an, die Windows-Welt hingegen \r\n.
weiterhin schönen abend...