• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Umbruch in Datenbank speichern

rapid10

Mitglied
Hallo PHP-Profis,

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.

Habe folgenden Code:
PHP:
<?php
	function blank($text) {
		$str = preg_replace('/\s\s+/', ' ', $text);
		return $str;
	}
?>
Kann es daran liegen, dass die Absätze nicht mehr gespeichert werden? Denn wie gesagt vorher ist das problemlos gegangen.

Danke für eure Hilfe!
 
Werbung:
Nimm mal

PHP:
$str = preg_replace("/ +/", " ", $text);

Allerdings bezweifel ich, dass die fehlenden Zeilenumbrüche wirklich daran liegen.
 
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.

Nochmal vielen Dank für deine Hilfe!
 
Werbung:
Wenn mich eine entsprechend Google-Nachfrage nicht täuscht, sollte das mit

Code:
$str = str_replace(\'\\r\\n\\r\\n\',\'\\r\\n\',$str);
möglich sein. Müsstest Du nach deinem preg_replace einfügen.
 
Danke dir! Allerdings hat das nicht wirklich funktioniert.
Daher habe ich etwas ähnliches fabriziert, was glücklicherweise funktioniert. ;-)

PHP:
<?php
	function blank($text) {
		$str = trim($text);
		$str = preg_replace("/ +/", " ", $str);
		$str = preg_replace("/(\n\s*){3,}/", "\n", $str);  
		return $str;
	}
?>
Ist das so in Ordnung, oder sollte daran etwas verbessert werden?
 
Die ganze Sache ist gar nicht so einfach. Es gibt beispielsweise auch andere Leerzeichen als das normale „Space“.

- Leerraum

Beispiel (in UTF-8):

Code:
echo '<pre>';
echo "test\xC2\xA0\n\xC2\xA0\n\xC2\xA0\n\xC2\xA0\n\xC2\xA0\ntest";
echo '</pre>';
 
Werbung:
Das heißt, was soll ich nun machen? Ich prüfe "nur" die Eingabe eines Formularfeldes. Ist da so Leerraum überhaupt wichtig?

MfG
 
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;
}

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);
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 '<p>' . preg_replace('/(?:\r\n|[\r\n]){2,}/', '</p><p>', $string) . '</p>'; 
	}
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);
zu
PHP:
s = preg_replace('/\n{3,}/', "\r\n", $s);
ändern...

Danke!
 
Zuletzt bearbeitet:
Werbung:
Hm, so schreibst du dann aber teilweise \n- und teilweise \r\n-Zeilenumbrüche in die Datenbank. Lass lieber das preg_replace vor der Eingabe so

PHP:
$s = preg_replace('/\n{2,}/', "\n", $s); // Zwei oder mehr zu einem

und ändere paragraph:

PHP:
function paragraph($string)
{
    return '<p>' . str_replace("\n", '</p><p>', $string) . '</p>';
}
 
Zurück
Oben