Mit SQL Zeilenumbrüche entfernen
Viele Webprogrammierer kennen vielleicht das Problem. Ich habe ein Feld in einer Tabelle in der ein Benutzer selber Text eintragen kann. Genauer gesagt schreibt er dort HTML Code hinein. Diesen hat er natürlich schön formatiert mit zahlreichen HTML Tags und Zeilenumbrüchen. In der Datenbank und für das damit angeschlossene System macht es natürlich Sinn, dass man auch Zeilenumbrüche im Text abspeichert. Aber was passiert, wenn man mit den Daten extern weiterarbeiten will?
Das Problem
Ich möchte mit den Daten der Tabelle details in einem externen Script weiterarbeiten, aus diesem Grund erstelle ich mir aus der Tabelle eine CSV Datei. Dort sind die Spalten mit Komma getrennt gespeichert und die einzelnen Feldinhalte noch einmal durch Hochkomma geschützt.
Ein PHP Script könnte die einzelnen Zeilen zum Beispiel so auslesen:
$in=fopen("ausgabe.csv","r+"); while(!feof($in)) { $zeile = fgets($in,10000); echo $zeile; } fclose($in);
Der Code gibt lediglich den Inhalt der Datei aus. Auf der Konsole fällt auf, dass er aber nicht die gesamte Zeile ausgibt, sondern immer nur bis zum ersten Zeilenumbruch. fgets ließt Zeilenweise ein, ein Zeilenumbruch markiert also das Ende einer Zeile was zwar korrekt ist, in unserem Fall kann aber eine Zeile aus der Tabelle beliebig viele Zeilenumbrüche enthalten.
Die Lösung (SQL Zeilenumbrüche entfernen)
Die Lösung ist relativ simpel. Man kann mit einem SQL Statement Zeichen ersetzen. Das folgende Statement entfernt alle nicht Sichtbaren Zeilenumbrüche:
UPDATE details SET user_text = REPLACE(REPLACE(user_text, char(10), char(32)), char(13), char(32));
Da ich auch HTML Code habe möchte ich zusätzlich auch noch alle Leerzeichen zwischen den Tags entfernen. Das ging mit:
UPDATE details SET user_text = REPLACE(user_text, ' ', '');
Mit diesen Änderungen und einem neuerlichen Export ins CSV Format war ein weiterarbeiten möglich.