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?

678voto

Brendan Bullen Punkte 11196
//The simple version for 10 Characters from the beginning of the string
$string = substr($string,0,10).'...';

Aktualisierung:

Auf der Grundlage des Vorschlags zur Überprüfung der Länge (und zur Sicherstellung ähnlicher Längen bei beschnittenen und nicht beschnittenen Saiten):

$string = (strlen($string) > 13) ? substr($string,0,10).'...' : $string;

Sie erhalten also eine Zeichenkette mit maximal 13 Zeichen; entweder 13 (oder weniger) normale Zeichen oder 10 Zeichen gefolgt von "...".

Update 2:

Oder als Funktion:

function truncate($string, $length, $dots = "...") {
    return (strlen($string) > $length) ? substr($string, 0, $length - strlen($dots)) . $dots : $string;
}

Update 3:

Es ist schon eine Weile her, dass ich diese Antwort geschrieben habe, und ich verwende diesen Code eigentlich nicht mehr. Ich bevorzuge diese Funktion, die verhindert, dass die Zeichenkette in der Mitte eines Wortes unter Verwendung der wordwrap Funktion:

function truncate($string,$length=100,$append="…") {
  $string = trim($string);

  if(strlen($string) > $length) {
    $string = wordwrap($string, $length);
    $string = explode("\n", $string, 2);
    $string = $string[0] . $append;
  }

  return $string;
}

160voto

bruchowski Punkte 4633

Diese Funktion ist seit Version 4.0.6 in PHP integriert. Siehe die Dokumentationen .

echo mb_strimwidth('Hello World', 0, 10, '...');

// outputs Hello W...

Beachten Sie, dass die trimmarker (die Ellipse oben) sind in der verkürzten Länge enthalten.

15voto

Emil Vikström Punkte 87499

Die Multibyte-Erweiterung kann sich als nützlich erweisen, wenn Sie die Kontrolle über den Zeichensatz der Zeichenkette benötigen.

$charset = 'UTF-8';
$length = 10;
$string = 'Hai to yoo! I like yoo soo!';
if(mb_strlen($string, $charset) > $length) {
  $string = mb_substr($string, 0, $length - 3, $charset) . '...';
}

11voto

MortalViews Punkte 1230

Manchmal muss man die Zeichenkette auf das letzte vollständige Wort beschränken, d.h. man will nicht, dass das letzte Wort unterbrochen wird, sondern man hört mit dem vorletzten Wort auf.

z.B.: Wir müssen "This is my String" auf 6 Zeichen begrenzen, aber statt 'This i...' soll es 'This...' heißen, d.h. wir lassen die gebrochenen Buchstaben im letzten Wort weg.

puh, bin schlecht im Erklären, hier ist der Code.

class Fun {

    public function limit_text($text, $len) {
        if (strlen($text) < $len) {
            return $text;
        }
        $text_words = explode(' ', $text);
        $out = null;

        foreach ($text_words as $word) {
            if ((strlen($word) > $len) && $out == null) {

                return substr($word, 0, $len) . "...";
            }
            if ((strlen($out) + strlen($word)) > $len) {
                return $out . "...";
            }
            $out.=" " . $word;
        }
        return $out;
    }

}

9voto

TechNyquist Punkte 1266

Wenn Sie kürzen wollen und dabei darauf achten, keine Wörter zu trennen, können Sie wie folgt vorgehen

function ellipse($str,$n_chars,$crop_str=' [...]')
{
    $buff=strip_tags($str);
    if(strlen($buff) > $n_chars)
    {
        $cut_index=strpos($buff,' ',$n_chars);
        $buff=substr($buff,0,($cut_index===false? $n_chars: $cut_index+1)).$crop_str;
    }
    return $buff;
}

wenn $str kürzer als $n_chars ist, wird es unberührt zurückgegeben.

Wenn $str gleich $n_chars ist, wird es auch so zurückgegeben.

wenn $str länger als $n_Zeichen ist, wird das nächste Leerzeichen zum Abschneiden gesucht, oder (wenn keine weiteren Leerzeichen bis zum Ende vorhanden sind) wird $str stattdessen bei $n_Zeichen grob abgeschnitten.

HINWEIS: Beachten Sie, dass diese Methode im Falle von HTML alle Tags entfernt.

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