PHP Worttrennung aufheben

Überkinger

Lieutenant
Registriert
Juli 2010
Beiträge
600
Hallo, ich extrahiere aus einer Datei einen Text, wo Worttrennungen vorkommen.

Hallo, heute ist ein ganz be-
sonderer Tag, weil un-
aufhörlich die Sonne vom stahl-
blauen Himmel lacht.

Dieser Text liegt als String vor. Wie bekomme ich die Trennzeichen weg?

PHP:
$text ="Hallo, heute ist ein ganz be-sonderer Tag, weil un-aufhörlich die Sonne vom stahl-blauen Himmel lacht.";

[PHP]$text = preg_replace ("#-#si","",$text);

Die Funktion preg_replace funktioniert nicht. Die Trennzeichen bleiben erhalten. Wo liegt (m)ein Fehler?
 
PHP:
$text = str_replace("-", "", $text);
$text = str_replace("
", "", $text);

Damit auch die Zeilenumbrüche in den einzelnen Wörtern verschwinden.
 
Adam Gontier schrieb:
PHP:
$text = str_replace("-", "", $text);
$text = str_replace("
", "", $text);

Damit auch die Zeilenumbrüche in den einzelnen Wörtern verschwinden.
was man aber übersichtlicher mit
PHP:
$text = str_replace("\n", "", $text);
darstellen könnte ;)
 
Was ist mit Wörtern die während einer Zeile einen Bindestrich enthalten? Die wären dann ja auch weg.
Du musst nach "-\n" suchen, wenn das mit str_replace nicht geht musst du wohl mit nem regexp-replace drüber rennen ;)
Wenn alle Absätze mit weg sollen, dann wäre als Regulärer Ausdruck sowas zu gebrauchen: "-?\n"
 
Danke für Eure Hilfestellung. Wenn ich Eure Vorschläge zusammenzähle, sollte das die Lösung sein:
PHP:
$text = str_replace("-\n", "", $text);

Sollte das ein HTMl-String sein, dann:
PHP:
$text = str_replace("-<br />", "", $text);

Damit würde ich sicherstellen, dass nur am Zeilenumbruch sowohl der Zeilenumbruch als auch das Trennzeichen entfernt, das Wort wieder zusammengesetzt wird. Mehrsilbige Wörter bleiben unberührt. Ja, das geht denke ich.
 
Bei dem HTML Ding musst du vorsichtig sein. Da gibts viele Möglichkeiten einen Strich mit nem Absatz dahinter darzustellen...
z.B. <p>Wort-</p> (da können zwischen Bindestrich und </p> auch wieder n Leerzeichen sein
Wenn <br /> benutzt wird, dann ist das auch wieder mit n Leerzeichen zwischen <br und /> möglich. Aber es ist auch möglich einen Absatz zu schaffen, indem man nur <br> nimmt. Da kann dann jeweils z.B. direkt hinter der öffnenden spitzen Klammer Leerzeichen sein.
Das mit dem HTML würd ich auf jeden fall sein lassen, wenn möglich...

EDIT: Das entspricht zum Teil natürlich nicht dem, wie es gemacht werden SOLLTE. ABER(!) Wenn man HTML per Hand schreibt, kann es immer mal vorkommen, dass hier und da ein Leerzeichen reinkommt. Der Browser macht da keinen Unterschied in der Darstellung.

EDIT2: Es gibt da aber noch eine Möglichkeit (in JavaScript), für den Fall dass du handgeschriebenen HTML Code hast: Setz den Text in eine Rich-Text-Area ein. Der Browser kann dann automatisch zwischen Text und HTML konvertieren. Also man macht auf dem Teil ein 'setHTML()' und holt sich den eigentlich Text per 'getText()'. Da gehen dann natürlich alle anderen Formatierungen wie Fettschrift etc. verloren
 
Zuletzt bearbeitet:
benneque schrieb:
Bei dem HTML Ding musst du vorsichtig sein.

Ah, das war ein Hinweis. Denn HTML macht selbst einen Zeilenumbruch, wenn es einen Bindestrich in einem Wort findet. Z.B. in einer Tabelle oder in einem DIV in den die Zeile nicht rein passt. Dann macht HTML am Bindestrich automatisch einen Umbruch. Hmm, das erschwert die Geschichte.
 
Nein, der Browser macht in diesem Fall einen Zeilenumbruch. Den siehst du im HTML code nicht und musst dich auch nicht darum kümmern.
 
Also das ist kein Problem von HTML, sondern eher eine Browsergeschichte. Die nehmen den Bindestrich quasi genauso wahr wie ein Leerzeichen. Der Browser baut hier aber nicht selbstständig ein <br /> ein, es wird nur so dargestellt ;)
 
Zurück
Oben