Съкращаване на текст

smoke

Registered
Здравейте,
до сега съм съкращавал даден текст по този начин чрез определяне на броя букви mb_substr($text, 0, 150, "UTF8"); обаче ако има линк и съкращението съкрати линка и накрая не се затвори тага </a> дава еррор на всякаде надолу или какъвто и да е друг таг бихте ли ми дали някаква алтернатива която да не даваа еррор и ако случайно прекасне тага да си го довърши и след това да съкрати?
 
Директно от php.net

Код:
<?php
function html_substr($posttext, $minimum_length, $length_offset) {
   // The approximate length you want the concatenated text to be
   $minimum_length = 200;
   // The variation in how long the text can be
   // in this example text length will be between 200-10=190 characters
   // and the character where the last tag ends
   $length_offset = 10;
   // Reset tag counter & quote checker
   $tag_counter = 0;
   $quotes_on = FALSE;
   // Check if the text is too long
   if (strlen($posttext) > $minimum_length) {
       // Reset the tag_counter and pass through (part of) the entire text
       for ($i = 0; $i < strlen($posttext); $i++) {
           // Load the current character and the next one
           // if the string has not arrived at the last character
           $current_char = substr($posttext,$i,1);
           if ($i < strlen($posttext) - 1) {
               $next_char = substr($posttext,$i + 1,1);
           }
           else {
               $next_char = "";
           }
           // First check if quotes are on
           if (!$quotes_on) {
               // Check if it's a tag
               // On a "<" add 3 if it's an opening tag (like <a href...)
               // or add only 1 if it's an ending tag (like </a>)
               if ($current_char == "<") {
                   if ($next_char == "/") {
                                       $tag_counter++;
                   }
                   else {
                       $tag_counter = $tag_counter + 3;
                   }
               }
               // Slash signifies an ending (like </a> or ... />)
               // substract 2
               if ($current_char == "/") $tag_counter = $tag_counter - 2;
               // On a ">" substract 1
               if ($current_char == ">") $tag_counter--;
               // If quotes are encountered, start ignoring the tags
               // (for directory slashes)
               if ($current_char == "\"") $quotes_on = TRUE;
           }
           else {
               // IF quotes are encountered again, turn it back off
               if ($current_char == "\"") $quotes_on = FALSE;
           }
                           
           // Check if the counter has reached the minimum length yet,
           // then wait for the tag_counter to become 0, and chop the string there
           if ($i > $minimum_length - $length_offset && $tag_counter == 0) {
               $posttext = substr($posttext,0,$i + 1) . "...";
               return $posttext;
           }
       }
   }
             return $posttext;
}
?>
 
тези кодове не действат накрая имах един линк <a href="asasdasd"> обаче не го затвори и даде еррор с html-а на долу
 

Back
Горе