Ich denk doch mal, dass die smilie-Funktion so Zeichenfolgen gegen Bilder ersetzen soll. In dem Fall ist dann die methode mit explode() und implode() ein wenig für Tonne (Ich hab den Teil von Funatiker mal für die Erklärung ein wenig anders geschrieben, funktioniert jedoch noch identisch):
PHP:1
2
3
4
5
6
7
8
9
| <?php
$string = 'toller Text mit einem :D der gekürzt werden soll.';
$tmp = nl2br(smiley(bbcode($string)));
$result1 = explode('.',$tmp,1);
$result2 = implode('.',$result1); |
So: Was passiert genau?
(1) Die ursprünglichen Funktionen werden ausgeführt und liefern ein Ergebnis. Man erhält also als Rückgabe sowas wie (sofern smiley() die Zeichenketten gegen image-Tags austauscht)
$tmp = 'toller Text mit einem <img src="smileys/laugh.jpg" [...]/> der gekürzt werden soll.'
(2) Explode liefert einen Array, aller Elemente, die zwischen den '.' stehen. Durch den optionalen 3. Parameter (Limit) mit 1 Element:
$result = array('toller Text mit einem <img src="smileys/laugh');
(3) Das eine Element wird wieder zusammengebaut (Warum auch immer) Und man hat einen "Satz" mit einem kaputten (x)HTML-Tag
Bemerkungen
1) Statt implode(explode(...)) wäre es sinnvoller mit strpos() die Position des '.' zu ermitteln und einen substr() vom Anfang bis zu der Position zu verarbeiten.
2) Sollte man zusätzlich noch eine maximale Länge des Satzes verwenden, da es Leute geben soll, die die Länge unnötig weit aufblasen und so das ganze News-System schon ein bisschen komisch aussehen könnte, wenn man das auf einer anderen Seite einbinden möchte, oder man erhält zb Fehler beim Speichern in einer Datenbank, etc...
3) Für ermitteln des ersten Satzes bei Zeichenketten, die HTML-Tags enthalten, ist eigentlich ein regulärer Ausdruck angebrachter.