web-dev-qa-db-fra.com

limiter la longueur du texte en php et fournir le lien "Lire la suite"

J'ai du texte stocké dans la variable php $ text. Ce texte peut contenir 100, 1000 ou 10000 mots. Dans sa version actuelle, ma page est étendue en fonction du texte, mais si le texte est trop long, la page est moche.

Je souhaite obtenir la longueur du texte et limiter le nombre de caractères à peut-être 500. Si le texte dépasse cette limite, je souhaite fournir un lien indiquant "En savoir plus". Si vous cliquez sur le lien "Lire la suite", une fenêtre contextuelle contenant tout le texte de $ text apparaîtra.

38
Scorpion King

C'est ce que j'utilise:

// strip tags to avoid breaking any html
$string = strip_tags($string);
if (strlen($string) > 500) {

    // truncate string
    $stringCut = substr($string, 0, 500);
    $endPoint = strrpos($stringCut, ' ');

    //if the string doesn't contain any space then it will cut without Word basis.
    $string = $endPoint? substr($stringCut, 0, $endPoint) : substr($stringCut, 0);
    $string .= '... <a href="/this/story">Read More</a>';
}
echo $string;

Vous pouvez le modifier davantage, mais le travail est fait en production.

131
webbiedave
$num_words = 101;
$words = array();
$words = explode(" ", $original_string, $num_words);
$shown_string = "";

if(count($words) == 101){
   $words[100] = " ... ";
}

$shown_string = implode(" ", $words);
8
Brian H

J'ai combiné deux réponses différentes:

  1. Limiter les personnages 
  2. Balises HTML manquantes

    $string = strip_tags($strHTML);
    $yourText = $strHTML;
    if (strlen($string) > 350) {
        $stringCut = substr($post->body, 0, 350);
        $doc = new DOMDocument();
        $doc->loadHTML($stringCut);
        $yourText = $doc->saveHTML();
    }
    $yourText."...<a href=''>View More</a>"
    
3
Waqas Ahmed

Utilisez ceci simplement pour effacer le texte:

echo strlen($string) >= 500 ? 
substr($string, 0, 490) . ' <a href="link/to/the/entire/text.htm">[Read more]</a>' : 
$string;

Modifier et enfin:

function split_words($string, $nb_caracs, $separator){
    $string = strip_tags(html_entity_decode($string));
    if( strlen($string) <= $nb_caracs ){
        $final_string = $string;
    } else {
        $final_string = "";
        $words = explode(" ", $string);
        foreach( $words as $value ){
            if( strlen($final_string . " " . $value) < $nb_caracs ){
                if( !empty($final_string) ) $final_string .= " ";
                $final_string .= $value;
            } else {
                break;
            }
        }
        $final_string .= $separator;
    }
    return $final_string;
}

Ici separator est le lien href pour en savoir plus;)

2
CrazyMax
<?php $string = "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.";
if (strlen($string) > 25) {
$trimstring = substr($string, 0, 25). ' <a href="#">readmore...</a>';
} else {
$trimstring = $string;
}
echo $trimstring;
//Output : Lorem Ipsum is simply dum [readmore...][1]
?>
2
Abdul Baquee

Cette méthode ne tronquera pas un mot au milieu.

list($output)=explode("\n",wordwrap(strip_tags($str),500),1);
echo $output. ' ... <a href="#">Read more</a>';
1
stillstanding

Limiter le nombre de mots dans le texte:

function limitTextWords($content = false, $limit = false, $stripTags = false, $Ellipsis = false) 
{
    if ($content && $limit) {
        $content = ($stripTags ? strip_tags($content) : $content);
        $content = explode(' ', $content, $limit+1);
        array_pop($content);
        if ($Ellipsis) {
            array_Push($content, '...');
        }
        $content = implode(' ', $content);
    }
    return $content;
}

Limiter les caractères dans le texte:

function limitTextChars($content = false, $limit = false, $stripTags = false, $Ellipsis = false) 
{
    if ($content && $limit) {
        $content  = ($stripTags ? strip_tags($content) : $content);
        $Ellipsis = ($Ellipsis ? "..." : $Ellipsis);
        $content  = mb_strimwidth($content, 0, $limit, $Ellipsis);
    }
    return $content;
}

Utilisation:

$text = "It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout.";
echo limitTextWords($text, 5, true, true);
echo limitTextChars($text, 5, true, true);
1
Alexandru Sirbu

Je suppose que cela vous aidera à résoudre votre problème s'il vous plaît vérifier sous Fonction donnée: coupe le texte dans un espace puis ajoute des ellipses si vous le souhaitez

  • @param string $ texte saisi à couper

    • @param int $ longueur en caractères à couper pour
    • @param bool $ ellipses si des ellipses (...) doivent être ajoutées
    • @param bool $ strip_html si les balises HTML doivent être supprimées
    • @retour string 

      function trim_text($input, $length, $ellipses = true, $strip_html = true) {
      //strip tags, if desired
      if ($strip_html) {
          $input = strip_tags($input);
      }//no need to trim, already shorter than trim length
      if (strlen($input) <= $length) {
          return $input;
      }
      
      //find last space within length
      $last_space = strrpos(substr($input, 0, $length), ' ');
      $trimmed_text = substr($input, 0, $last_space);
      
      //add ellipses (...)
      if ($ellipses) {
          $trimmed_text .= '...';
      }
      
      return $trimmed_text;}
      
0

Fondamentalement, vous devez intégrer un limiteur Word (par exemple quelque chose comme ceci ) et utiliser quelque chose comme shadowbox . Votre lien "lire plus" doit renvoyer à un script PHP affichant l'intégralité de l'article. Configurez simplement Shadowbox sur ces liens et vous êtes prêt. (Voir les instructions sur leur site. C'est facile.)

0
simshaun

Autre méthode: insérez ce qui suit dans le fichier function.php de votre thème.

remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'custom_trim_excerpt');

function custom_trim_excerpt($text) { // Fakes an excerpt if needed
global $post;
if ( '' == $text ) {
$text = get_the_content('');
$text = apply_filters('the_content', $text);
$text = str_replace(']]>', ']]>', $text);
$text = strip_tags($text);
$excerpt_length = x;
$words = explode(' ', $text, $excerpt_length + 1);
if (count($words) > $excerpt_length) {
array_pop($words);
array_Push($words, '...');
$text = implode(' ', $words);
}
}
return $text;
}

Vous pouvez utiliser ceci.

0
csehasib
<?php
     $images_path = 'uploads/adsimages/';
             $ads = mysql_query("select * from tbl_postads ORDER BY ads_id DESC limit 0,5 ");
                    if(mysql_num_rows($ads)>0)
                    {
                        while($ad = mysql_fetch_array($ads))

                        {?>


     <div style="float:left; width:100%; height:100px;">
    <div style="float:left; width:40%; height:100px;">
      <li><img src="<?php echo $images_path.$ad['ads_image']; ?>" width="100px" height="50px" alt="" /></li>
      </div>

       <div style="float:left; width:60%; height:100px;">
      <li style="margin-bottom:4%;"><?php echo substr($ad['ads_msg'],0,50);?><br/> <a href="index.php?page=listing&ads_id=<?php echo $_GET['ads_id'];?>">read more..</a></li>
      </div>

     </div> 

    <?php }}?>
0
user4268649