preg_match, Text verkleinern und Umlaute

Myar

Mitglied
Hallöchen!

Folgendes Problem:
Für einen Blog habe ich mir ne Funktion gebaut, die zu langen Text kürzt und dabei darauf achten soll, dass nicht mitten im Wort abgeschnitten wird. Funktioniert auch, nur hat das Ding Probleme mit Umlauten. Ist an der Stelle, an der abgeschnitten werden soll, ein Umlaut, wird hinter dem Umlaut abgeschnitten und ich bekomme ein ? ausgegeben.
Wie bekomme ich es hin, dass das preg_match den Umlaut erkennt?

PHP:
return (preg_match('/^(.*)\W.*$/', mb_substr($string, 0, $length+1,'UTF-8'), $matches) ? $matches[1] : mb_substr($string, 0, $length,'UTF-8')) . $replacer;

Viele Grüße
Myar
 
Eigentlich egal. Ich habe da eine Lösung für dich:
http://wiki.yaslaw.info/wikka/PhpWordCut

PHP:
$teaser = wordCut($string, 50, '...');

function wordCut($text, $maxlen = 30, $suffix = ''){
    if(!defined('C_DELIMITER')) DEFINE('C_DELIMITER', '#wordCut#');
    // Falls der Text selber schon genug kurz ist, diesen unverändert zurückgeben
    if(strlen($text)<$maxlen) return $text;
    // Mittels wordwrap den String unterteilen
    $trunc = explode(C_DELIMITER, wordwrap($text, $maxlen, C_DELIMITER, true));
    //danach den ersten Teil davon extrahieren
    $trunc = array_shift($trunc);
    return trim("{$trunc} {$suffix}");
}

Und wenn du soch mit &uuml; arbeitest, dann besser so aufrufen damit &uuml; als nur ein Zeichen gewertet wird
PHP:
$teaser =htmlentities(wordcut(html_entity_decode($text), 50, '...'));
 
Zurück