2010-12-15 24 views
6

Dites par exemple, j'ai le code suivant:titre Garniture pour mot le plus proche

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

Si je voulais raccourcir ces titres en utilisant PHP ou jQuery, comment puis-je les tailler au plus proche mot et ajouter des points de suspension? Est-il possible de spécifier un nombre de caractères?

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

Modifier - Comment puis-je faire pour chacun des titres? Je n'ai pas vraiment une idée de la façon de passer chaque titre dans une chaîne ...

Merci

+2

Je ris de la compétitivité pour répondre à cette question. – thirtydot

+0

@thirdydot: Cela arrive sur ces faciles. – Jonah

+0

@thirtydot, c'est le site où l'on peut obtenir des réponses en fraction de seconde – kobe

Répondre

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; 
} 
?> 

Cette fonction peut alors être utilisé de la manière suivante:

<?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

Aucun de ces liens ne fonctionne plus –

1

Voir cette question:

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

Edit: (y compris < = chèque limite de $)

<?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

Peut-être que vous recherchez wordwrap(). Utilisez $ break pour rompre la ligne à l'aide du paramètre de rupture optionnel: $ break. Si la coupure est définie sur TRUE, la chaîne est toujours encapsulée à ou avant la largeur spécifiée. Donc, si vous avez un mot qui est plus grand que la largeur donnée, il est brisé.

Consultez la documentation de la fonction sur le site de php pour plus d'exemples.

+++

Une autre solution serait de diviser le titre par ' ' (un espace) à l'aide explode() et de fournir une limite à dire 5 max mots, que couper le dernier élément du tableau à l'aide array_pop et enfin les rejoindre avec implode() en utilisant ' ' (cet espace) comme de la colle. Mais cette solution n'est pas la meilleure car elle vous donnera une sortie laide si vous avez de longs mots.

+0

juste une remarque que l'OP ne veut pas couper des mots en deux. * le mot le plus proche * – RageZ

+0

Il est écrit "Si la coupe est définie sur VRAI", il doit donc simplement la définir comme fausse. – s3v3n

1

Si vous voulez être dans une longueur spécifique, cela fonctionnera.

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); 

Testé, fonctionne parfaitement.

Edition: mise en fonction.

9

C'est facile en utilisant une fonction PHP.Regardez cet exemple:

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; 
} 

Vous pouvez ensuite passer dans le texte avec une fonction comme:

trim_text ('Mon titre super long', 10);

(je ne l'ai pas testé, mais il devrait fonctionner parfaitement.)

+0

+1 pour attraper si sous la longueur. – Jonah

0

utilisant une php et les puissantes expressions régulières

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

La même méthode devrait être possible en javascript en utilisant regex et jquery.

Jquery a également le plugin ellipsis, vous pourriez vouloir regarder dedans.