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?//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;
}
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.
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) . '...';
}
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;
}
}
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.
- See previous answers
- Weitere Antworten anzeigen