PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bestimmte Anzahl an Zeilenumbrüche entfernen


Vangogh
14.05.2008, 19:00:13
Hallo,
ich habe ein Script was eine Textbox enthält.

Die dort eingegebenen Daten werden per Abfrage in eine Datenbank gespeichert.
(Vorher werden die Daten mit "htmlentities" bearbeitet)

Nun möchte ich beim ausgeben der Daten unnötige Zeilenumbrüche entfernen.

Der Grund.
Es ist ein Gästebuch und User die gerne einen Text schreiben und dann 15x die Entertaste drücken und dann wieder etwas schreiben, sollen dadurch unterbunden werden.

Blade1965
15.05.2008, 10:05:18
Meines Erachtens nach kannst du nur alle oder keinen entfernen.
Aber ganz ohne Zeilenumbruch sehen die Einträge nicht gerade schön aus.

bUTschy
15.05.2008, 22:00:27
Hi,

ich hätte da nen brauchbaren Regex Einzeiler (http://www.mimaliro.de/cms.php?load=Inhalte&go=seite&id=12) für dich ;o)

Tumasch
21.05.2008, 17:59:26
str_replace ("\n";" ";$text);

nicht ganz genau das was du suchst, ist aber schnell und macht hübsche textblöcke aus den Einträgen :-)

Goggle
02.06.2008, 16:31:39
Die trim() Funktion dürfte das richtige sein, sie entfehrnd alles unnötige am Anfang und am Ende eines Strings.
Ich geh jetzt einfach mal davon aus, dass deine Textbox aus einem einzigen String besteht....

Hier noch ein Link zur doku:
http://fi.php.net/trim

Mfg Goggle

Goggle
02.06.2008, 16:51:44
Srry ich etwas besser lesen müssen...
habe aber trotzdem eine Lösung:


$a = "blablabla \n\n\n\n\n\n\n blablabla";
$a = explode("\n",$a);
for ($i=0; $i<=count($a); $i++){
trim($a[$i]);
}
$a = implode('\n',$a);


So kannst du (wenn es funktioniert, nicht getestet) immer nur maximal einen Zeilenumbruch haben.
Möglicherweise musst du noch eine if Anweisung reinbringen dass array Elemente die nur aus einem Zeilenumbruch bestehen löschen.

Mfg Goggle

yozek
02.06.2008, 17:51:09
Hi,

die o.s. Idee ist gar nicht so schlecht, aber so einfach ist es aber nicht. Vor allem wenn man keinen festen und eingeschränkten Benutzerkreis hat (bsp. in einer Firma, die jede Machine ein Mac ist, etc) ;)

Fast jedes OS hat eigene Escapesequenzen. Wenn das Skript also unter *nix seinen Dienst verrichtet, so wird es unter einem Windows-System oder Macintosh nicht laufen ;) Zumindest nicht korrekt ^^

Hier die Escapesquenezen zur Info:

Linux, Unix, Amiga, etc. : \n
Windows: \r\n
Macintosh: \r


<?php
/**
* cleanser function for incoming strings
*
* deletes all unneeded PHP_EOL lines to avoid streching the guestbook
* and returns code converted with htmlentities
*
* @param string $sString: unformated string
* @return string cleaned string
*/
function cleanser($sString)
{
/** mini validation */
if(empty($sString)) {
return false;
}

$sCleanedString = str_replace(array("\r\n", "\r", "\n"), PHP_EOL, $sString);
$aCleanedStrings = array();
foreach(explode(PHP_EOL,$sCleanedString) as $sSingleLine) {
$sSingleLine = trim($sSingleLine);
/** do not accept empty lines */
if(empty($sSingleLine)) {
continue;
}

array_push ($aCleanedStrings, $sSingleLine);
}

$sCleanedString = implode(PHP_EOL, $aCleanedStrings);
$sCleanedString = htmlentities($sCleanedString);
unset ($aCleanedStrings);


return $sCleanedString;
}


$sText = cleanser($_REQUEST['kommentar']);

?>