ich habe eine Problem. Ist zwar kein großes, aber leider ist es halt nicht so toll. Und zwar kontrolliere ich die Eingabe auf mehrere Leerzeichen hintereinander.
Wenn das der Fall ist, werden die überflüssigen Zeichen gelöscht.
Das funktioniert alles prima. Der Text wird in der Datenbank gespeichert, aber leider ohne Absätze. Vorher wurde der Text mit Absätzen gespeichert.
Perfekt! Danke, so hat es funktioniert.
Hab jetzt nur noch ne Frage. Kann man mit der Funktion auch gleichzeitig alle „überflüssigen“ Zeilenumbrüche löschen? Also dass in der Datenbank nur ein Zeilenumbruch enthalten ist und nicht beispielsweise 2 oder mehr.
Na ja, kommt drauf an, was du mit der Funktion genau bezwecken möchtest. Ich wollte darauf hinweisen, dass es in der Regel immer Mittel und Wege gibt, solche Filter zu umgehen, wenn man es drauf anlegt. Ich meine, man könnte sonst auch einfach viele Absätze einfügen, die als Inhalte zum Beispiel nur einen Punkt haben, wenn man unbedingt etwas Dummes eingeben möchte.
Es lassen sich eben immer nur bestimmte Dinge filtern.
[php]function clean($s)
{
$s = trim($s);
// Standardize all line breaks to \n
$s = str_replace(array("\r\n", "\r"), "\n", $s);
// Remove trailing "whitespace" (spaces and tabs) from lines
$s = preg_replace('/[ \t]+$/m', "", $s);
// Replace two or more consecutive spaces or tabs by one space
$s = preg_replace('/[ \t]{2,}/', ' ', $s);
// Replace tabs by one space
$s = str_replace("\t", ' ', $s);
// Replace two or more consecutive line breaks by two line breaks
$s = preg_replace('/\n{3,}/', "\n\n", $s);
return $s;
}[/php]
Ist allerdings besser als gar nichts. schulterzuck
Danke für den Code! Funktioniert prima!
Wenn ich aber hier
[PHP]
$s = preg_replace(‚/\n{3,}/‘, „\n\n“, $s);
[/PHP]
mehr als zwei Zeilenumbrüche nur zu „\n“ (nicht „\n\n“) ersetzen lasse, dann wird bei mir kein Absatz erzeugt, obwohl in der Datenbank der Text mit einem Absatz dargestellt wird.
Nutze für die Erstellung der Absätze diese Funktion:
[PHP]
function paragraph($string) {
return ‚
‘ . preg_replace(‚/(?:\r\n|[\r\n]){2,}/‘, ‚
‘, $string) . ‚
‘;
}
[/PHP]
Was ich möchte, dass in der Datenbank nicht unnötig leere Zeilen auftreten, sondern ein ganz einfacher Zeilenumbruch (also kein doppelter).
EDIT: Habe es geschafft, musste nur das hier
[PHP]
s = preg_replace(‚/\n{3,}/‘, „\n\n“, $s);
[/PHP]
zu
[PHP]
s = preg_replace(‚/\n{3,}/‘, „\r\n“, $s);
[/PHP]
ändern…