2010-12-15 5 views
6

Say ich zum Beispiel den folgenden Code haben:Trim Überschrift zum nächsten Wort

<h3>My very long title</h3> 
<h3>Another long title</h3> 

Wenn ich diese Titel mit PHP oder jQuery, wie kann ich trimmen sie zum nächsten Wort und fügen Sie ein Auslassungszeichen verkürzen wollte? Ist es möglich, eine Anzahl von Zeichen anzugeben?

<h3>My very long...</h3> 
<h3>Another long...</h3> 

bearbeiten - Wie kann ich tun dies für jeden der Schlagzeilen? Ich habe nicht wirklich eine Idee, wie man jede Überschrift in einen String zu übergeben ...

Dank

+2

Ich lache über die Wettbewerbsfähigkeit, um diese Frage zu beantworten. – thirtydot

+0

@thirdydot: Das passiert auf diesen einfachen. – Jonah

+0

@thirtydot, das ist die Seite, wo wir Antworten in Sekundenbruchteilen bekommen können – kobe

Antwort

5

Creating an ellipsis in PHP

<?php 
function ellipsis($text, $max=100, $append='&hellip;') 
{ 
    if (strlen($text) <= $max) return $text; 
    $out = substr($text,0,$max); 
    if (strpos($text,' ') === FALSE) return $out.$append; 
    return preg_replace('/\w+$/','',$out).$append; 
} 
?> 

Diese Funktion kann dann auf folgende Weise verwendet werden:

<?php 
$text = "Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo."; 
echo ellipsis($text,100); 
?> 

jquery Auto Ellipsis

+0

Keines dieser Links funktioniert mehr –

1

Sehen Sie diese question:

function wrap($string, $limit) { 
    $wstring = explode("\n", wordwrap($string, $limit, "\n")); 
    return $wstring[0] . '...'; 
} 

Edit: (einschließlich < = $ Limitprüfung

)
<?php 
function wrap($string, $limit) { 
    if (strlen($string) <= $limit) { 
     return $string; 
    } 
    $wstring = explode("\n", wordwrap($string, $limit, "\n")); 
    return $wstring[0] . '...'; 
} 
?> 
<h3><?php echo wrap('My very long title', 12); ?></h3> 
1

Vielleicht bist du wordwrap().

string wordwrap (string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = false ]]]) 

Verwenden Sie $ break, um die Zeile mit dem optionalen break-Parameter zu unterbrechen. Wenn der Schnitt auf TRUE gesetzt ist, wird die Zeichenfolge immer um oder vor der angegebenen Breite umgebrochen. Wenn Sie also ein Wort haben, das größer als die angegebene Breite ist, wird es auseinander gebrochen.

Weitere Beispiele finden Sie in der Funktionsdokumentation auf der php-Website.

+++

Eine andere Lösung wäre, Titel von ' ' aufzuspalten (ein Raum) unter Verwendung von explode() und eine Grenze bereitzustellen max 5 Wörter zu sagen, als das letzte Element des Arrays unter Verwendung array_pop abgeschnitten und schließlich sie verbindenden mit implode() mit ' ' (dieser Raum) als Kleber. Aber diese Lösung ist nicht die beste, weil es Ihnen hässliche Ausgabe gibt, wenn Sie lange Wörter haben.

+0

nur eine Bemerkung das OP will nicht Wörter in zwei Hälften schneiden. * nächstes Wort * – RageZ

+0

Es steht "Wenn der Schnitt auf TRUE gesetzt ist", also muss er nur falsch gesetzt werden. – s3v3n

1

Wenn Sie innerhalb einer bestimmten Länge sein möchten, wird dies funktionieren.

function truncateString($string, $length, $append = '...') { 
    $length -= strlen($append); // length of "..." 

    $string = substr($string, 0, $length); 
    $string = substr($string, 0, strrpos($string, ' ')); 
    $string .= $append; 

    return $string; 
} 
echo truncateString('My very long title', 15); 

Getestet, funktioniert perfekt.

Edit: in Funktion umgewandelt.

9

Dies ist einfach mit einer PHP-Funktion.Schauen Sie sich dieses Beispiel:

function trim_text($input, $length) { 

    // If the text is already shorter than the max length, then just return unedited text. 
    if (strlen($input) <= $length) { 
     return $input; 
    } 

    // Find the last space (between words we're assuming) after the max length. 
    $last_space = strrpos(substr($input, 0, $length), ' '); 
    // Trim 
    $trimmed_text = substr($input, 0, $last_space); 
    // Add ellipsis. 
    $trimmed_text .= '...'; 

    return $trimmed_text; 
} 

Sie dann in Text mit einer Funktion wie passieren kann:

trim_text ('My super langen Titel', 10);

(ich dies nicht getestet, aber es sollte perfekt funktionieren.)

+0

+1 für den Fang, wenn in der Länge. – Jonah

0

einige PHP und die mächtige reguläre Ausdrücken

function formatHeadline($headline){ 
    if(preg_match('/(\w+\s+){3}/', $subject, $match)){ 
     return $match[1] . '...'; 
    } 
    return $headline; 
} 

Das gleiche Verfahren soll in Javascript möglich sein, Verwenden von Regex und Jquery.

Jquery haben auch das ellipsis Plugin, möchten Sie vielleicht hineinschauen.