2010-11-23 8 views
33

Ich habe Text in der PHP-Variable $ Text gespeichert. Dieser Text kann 100 oder 1000 oder 10000 Wörter umfassen. Wie derzeit implementiert, erweitert sich meine Seite basierend auf dem Text, aber wenn der Text zu lang ist, sieht die Seite hässlich aus.Begrenzen Sie die Textlänge in PHP und bieten Sie "Lesen Sie mehr" Link

Ich möchte die Länge des Textes erhalten und die Anzahl der Zeichen auf vielleicht 500 begrenzen, und wenn der Text diese Grenze überschreitet, möchte ich einen Link mit der Aufschrift "Read more." Wenn der Link "Mehr lesen" angeklickt wird, wird ein Pop mit dem gesamten Text in $ text angezeigt.

+7

Haben Sie etwas noch versucht? Im Moment sieht das so aus: "Bitte geben Sie mir den Codez" –

+0

kann es Markup in $ Text geben? – Gordon

Antwort

114

ist das, was ich benutze:

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

Sie können es weiter optimieren, aber es wird die Arbeit in der Produktion durchgeführt.

+1

Danke für die Antwort, aber nach der Verwendung von strip_tags ($ strings) ist der HTML-Code verloren, wie kann ich nach dem Reduzieren der String-Länge den HTML-Code beibehalten, der zuvor vorhanden war – harshal

+0

@harshal Die 'strip_tags' ist da da die meisten Seiten habe gerade mal an einfachen text bliks gearbeitet (die dann auf die seite mit dem vollformatierten artikel verlinken). Wenn Sie den HTML-Code beibehalten möchten, können Sie einen XML-Parser verwenden, um die Textwerte jedes Unterelements abzurufen, indem Sie die Anzahl der Zeichen akkumulieren und gleichzeitig nach einem möglichen Bruch des Tags suchen. Das ist ein viel komplexeres Problem und geht weit über den Rahmen dieser Frage hinaus. – webbiedave

+0

@Webbiedave was ist die href hier ?? Entschuldigung, ich habe es nicht verstanden, deshalb fragte ich? Soll es auf eine eigene Seite oder etwas anderes zeigen? –

0

Grundsätzlich müssen Sie einen Wortbegrenzer (z. B. something like this) integrieren und so etwas wie shadowbox verwenden. Ihr Link mehr lesen sollte mit einem PHP-Skript verlinken, das den gesamten Artikel anzeigt. Richte Shadowbox einfach auf diesen Links ein und schon kannst du loslegen. (Siehe Anweisungen auf ihrer Website Es ist einfach..)

2

Einfache Nutzung dieser den Text abzustreifen:

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

bearbeiten und schließlich:

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

Hier Separator ist das href Link, um mehr zu lesen ;)

+0

Sie erkennen, dass 500 Buchstaben, nicht Worte, Ritus ist?: D Auch das kann den Code der Seite komplett durchbrechen, wenn es irgendeinen HTML Code gibt (kann wie ... sein) –

+0

Ok also benutze strip_tags() drinnen;) – CrazyMax

+0

Das könnte ein Wort schneiden. – Aif

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

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

$shown_string = implode(" ", $words); 
+0

Sie können den "..." zu einem Link zu mehr Informationen ändern, oder es ein Div mit dem ganzen Textblock auf der gleichen Seite öffnen. Viele Optionen .. –

+0

formatieren Sie bitte Ihre Antwort das nächste Mal. Am oberen Rand des Textfelds befinden sich entsprechende Schaltflächen. – stillstanding

+0

Da es sich um ein Formatierungsproblem handelt, ist es vorzuziehen, die Anzahl der Zeichen auf Grund der Anzahl der Zeichen zu begrenzen, da die Wörter unterschiedliche Länge haben. – webbiedave

0

Diese Methode schneidet kein Wort in der Mitte ab. Diese

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

Eine andere Methode: Fügen Sie Folgendes in die Datei function.php Ihres Themes ein.

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

Sie können dies verwenden.

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

nur Code-Antworten sind nicht wirklich willkommen – chouaib

0
<?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] 
?> 
3

Ich habe zwei verschiedene Antworten kombinieren:

  1. Grenze die Zeichen
  2. komplette HTML-Tags fehlende

    $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>" 
    
0

Limit-Wort s in Text:

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

Grenze Zeichen im Text:

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

Verwendung:

$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); 
Verwandte Themen