PHP: Text in Sätzen zerlegen
2. März 2008
Für ein Projekt habe ich eine Funktion gesucht, um einen Text in seine Sätze zu zerlegen. Klingt nach einer einfachen Aufgabe, ist es aber nicht.
Zuerst versuchte ich die scheinbar einfachste Methode: explode(). Mit dieser Funktion lässt sich ein String anhand eines Trennzeichens zerlegen. Nun habe ich aber drei (Punkt, Fragezeichen und Ausrufezeichen).
Also musste eine intelligentere Funktion ran: preg_split(). Dieser reguläre Ausdruck brachte ein sehr gutes Ergebnis, hatte jedoch ein Problem: am Ende fehlten alle Satzzeichen.
$sentences = preg_split('#\.|!|\?#', $source, -1, PREG_SPLIT_NO_EMPTY);
Da ich sonst nichts fand, schrieb ich kurzerhand meine eigene Funktion, die arbeitet wie ich möchte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | /** * Teilt einen String in Sätze auf * * @param string $source Text zum Trennen * @author Michael Mayr (http://michfrm.net) * @return array */ function SplitSentences($source) { $s = array(); $marks = array('.', '!', '?'); // count strlen every loop because $source can change while loop for ($i = 0; $i < strlen($source); ++$i) { $c = $source[$i]; foreach ( $marks as $mark ) { if ( $c == $mark ) { $s[] = substr($source, 0, $i) . $mark; $source = trim(substr($source, $i + 1)); $i = 0; } } } return $s; } $text = 'This ist ein Satz. Dies ein Ausruf! Und das einfach nur eine Frage?'; print_r(SplitSentences($text)); |
Ausgabe:
Array
(
[0] => This ist ein Satz.
[1] => Dies ein Ausruf!
[2] => Und das einfach nur eine Frage?
)
Ich hoffe, diese Funktion kann noch anderen nützlich sein.
Javascript: Automatisch die Größe eines Textfeldes anpassen
16. Februar 2008
In meinem CMS nutze ich ein kleines Notiz-System, damit ich mir schnell Sachen notieren kann für einen späteren Zeitpunkt. Einen Schwachpunkt hat das Design: Die Box selbst passt sich immer an die Länge der Notiz an, jedoch nicht die Box für den Editor. Daher habe ich mit meinem bisschen Javascript eine kleine Funktion entwickelt, die die Textbox an den Inhalt anpasst.
Getestet habe ich es mit Opera 9.5 und einer meiner Bekannten mit dem IE 7.0, das Snippet ist public domain. Kommentare gibt es im Quellcode reichlich.