PHP Worttrennung aufheben

Überkinger

Lieutenant
Dabei seit
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?
 
A

Adam Gontier

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

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
9.179
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"
 

Überkinger

Lieutenant
Ersteller dieses Themas
Dabei seit
Juli 2010
Beiträge
600
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.
 

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
9.179
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:

Überkinger

Lieutenant
Ersteller dieses Themas
Dabei seit
Juli 2010
Beiträge
600

Darlis

Commodore
Dabei seit
Jan. 2011
Beiträge
4.228
Nein, der Browser macht in diesem Fall einen Zeilenumbruch. Den siehst du im HTML code nicht und musst dich auch nicht darum kümmern.
 

benneq

Admiral
Dabei seit
Juli 2010
Beiträge
9.179
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 ;)
 
Top