384 Stimmen

Abschneiden einer Zeichenkette auf die ersten n Zeichen einer Zeichenkette und Hinzufügen von drei Punkten, wenn irgendwelche Zeichen entfernt werden

Wie kann ich die ersten n Zeichen eines Strings in PHP ermitteln? Wie kann ich eine Zeichenkette am schnellsten auf eine bestimmte Anzahl von Zeichen kürzen und bei Bedarf '...' anhängen?

8voto

Matthew Punkte 14870

Das Codeigniter-Framework enthält einen Helfer für diese Aufgabe, den "text helper". Hier ist eine Dokumentation aus dem Benutzerhandbuch von Codeigniter, die darauf zutrifft: http://codeigniter.com/user_guide/helpers/text_helper.html (lesen Sie einfach die Abschnitte word_limiter und character_limiter). Hier sind zwei Funktionen daraus, die für Ihre Frage relevant sind:

if ( ! function_exists('word_limiter'))
{
    function word_limiter($str, $limit = 100, $end_char = '…')
    {
        if (trim($str) == '')
        {
            return $str;
        }

        preg_match('/^\s*+(?:\S++\s*+){1,'.(int) $limit.'}/', $str, $matches);

        if (strlen($str) == strlen($matches[0]))
        {
            $end_char = '';
        }

        return rtrim($matches[0]).$end_char;
    }
}

Und

if ( ! function_exists('character_limiter'))
{
    function character_limiter($str, $n = 500, $end_char = '…')
    {
        if (strlen($str) < $n)
        {
            return $str;
        }

        $str = preg_replace("/\s+/", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $str));

        if (strlen($str) <= $n)
        {
            return $str;
        }

        $out = "";
        foreach (explode(' ', trim($str)) as $val)
        {
            $out .= $val.' ';

            if (strlen($out) >= $n)
            {
                $out = trim($out);
                return (strlen($out) == strlen($str)) ? $out : $out.$end_char;
            }       
        }
    }
}

5voto

HCL Punkte 166
if(strlen($text) > 10)
     $text = substr($text,0,10) . "...";

3voto

Dlongnecker Punkte 2938

Teilstring verwenden

http://php.net/manual/en/function.substr.php

$foo = substr("abcde",0, 3) . "...";

2voto

Diese Funktion erledigt die Aufgabe, ohne die Wörter in der Mitte zu unterbrechen

    function str_trim($str,$char_no){
        if(strlen($str)<=$char_no)
            return $str;
        else{
            $all_words=explode(" ",$str);
            $out_str='';
            foreach ($all_words as $word) {
                $temp_str=($out_str=='')?$word:$out_str.' '.$word;
                if(strlen($temp_str)>$char_no-3)//-3 for 3 dots
                    return $out_str."...";
                $out_str=$temp_str;
            }
        }
    }

1voto

Benjamin Crouzier Punkte 37441

Die von mir verwendete Funktion:

function cutAfter($string, $len = 30, $append = '...') {
        return (strlen($string) > $len) ? 
          substr($string, 0, $len - strlen($append)) . $append : 
          $string;
}

Siehe es in Aktion .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X