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?
Antworten
Zu viele Anzeigen?Diese Lösung schneidet keine Wörter ab, sondern fügt drei Punkte nach dem ersten Leerzeichen hinzu. Ich habe die Lösung von @Raccoon29 bearbeitet und alle Funktionen durch folgende ersetzt mb_ Funktionen, damit dies für alle Sprachen wie Arabisch funktioniert
function cut_string($str, $n_chars, $crop_str = '...') {
$buff = strip_tags($str);
if (mb_strlen($buff) > $n_chars) {
$cut_index = mb_strpos($buff, ' ', $n_chars);
$buff = mb_substr($buff, 0, ($cut_index === false ? $n_chars : $cut_index + 1), "UTF-8") . $crop_str;
}
return $buff;
}
$yourString = "bla blaaa bla blllla bla bla";
$out = "";
if(strlen($yourString) > 22) {
while(strlen($yourString) > 22) {
$pos = strrpos($yourString, " ");
if($pos !== false && $pos <= 22) {
$out = substr($yourString,0,$pos);
break;
} else {
$yourString = substr($yourString,0,$pos);
continue;
}
}
} else {
$out = $yourString;
}
echo "Output String: ".$out;
Wenn es keine feste Vorgabe für die Länge der abgeschnittenen Zeichenfolge gibt, kann man dies verwenden, um auch das letzte Wort abzuschneiden und zu verhindern:
$text = "Knowledge is a natural right of every human being of which no one
has the right to deprive him or her under any pretext, except in a case where a
person does something which deprives him or her of that right. It is mere
stupidity to leave its benefits to certain individuals and teams who monopolize
these while the masses provide the facilities and pay the expenses for the
establishment of public sports.";
// we don't want new lines in our preview
$text_only_spaces = preg_replace('/\s+/', ' ', $text);
// truncates the text
$text_truncated = mb_substr($text_only_spaces, 0, mb_strpos($text_only_spaces, " ", 50));
// prevents last word truncation
$preview = trim(mb_substr($text_truncated, 0, mb_strrpos($text_truncated, " ")));
In diesem Fall, $preview
wird sein "Knowledge is a natural right of every human being"
.
Live-Code-Beispiel: http://sandbox.onlinephpfunctions.com/code/25484a8b687d1f5ad93f62082b6379662a6b4713
- See previous answers
- Weitere Antworten anzeigen