Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przycinanie tekstu z formatowaniem HTML, jak to zrobić aby zachować formatowanie
Diabl0
post
Post #1





Grupa: Zarejestrowani
Postów: 24
Pomógł: 1
Dołączył: 25.03.2006

Ostrzeżenie: (0%)
-----


Witam

Jak w temacie głowię się nad problemem przycinania tekstu z formatowaniem HTML (tekst z edytorów typu TinyMCE) do określonej ilości znaków z zachowaniem formatowania, i na razie nic sensownego nie wpada mi do głowy (a i google nic nie podpowiada ciekawego).

Problem jest taki: mam jakiś dłuższy tekst z formatowaniem HTML. Dla uproszczenia i przykładu:

ala ma kota
  1. <b>al<i>a</i> <u>ma</u></b> <i>ko<b>ta</b></i>


I potrzebuję na stronie wyświetlić przykładowo 6 znaków z tego tekstu z zachowaniem formatowania czyli:

ala ma
  1. <b>al<i>a</i> <u>ma</u></b>


Ma ktoś jakiś pomysł jak do tego podejść, albo może mnie nakierować na odpowiednią klasę/przykład ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
NuLL
post
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Zgodne z XHTML - wymaga tagow typu <br/>

  1. <?php
  2. function html_substr(
  3. $posttext, #tekst do skrocenia
  4. $minimum_length = 200, #minimalna dlugosc
  5. $length_offset = 20, #dlugosc offsetu
  6. $cut_words = FALSE, #ciac slowa ?
  7. $dots = TRUE #dokleic 3 kropki (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
  8. ) {
  9.  
  10.    $tag_counter = 0;
  11.    $quotes_on = FALSE;
  12.  
  13.    if (strlen($posttext) > $minimum_length) {
  14.  
  15.        $c = 0;
  16.        for ($i = 0; $i < strlen($posttext); $i++) {
  17.  
  18.            $current_char = substr($posttext,$i,1);
  19.            if ($i < strlen($posttext) - 1) {
  20.                $next_char = substr($posttext,$i + 1,1);
  21.            }
  22.            else {
  23.                $next_char = "";
  24.            }
  25.  
  26.            if (!$quotes_on) {
  27.                if ($current_char == '<') {
  28.                    if ($next_char == '/') {
  29.                        $tag_counter += 1;
  30.                    }
  31.                    else {
  32.                        $tag_counter += 3;
  33.                    }
  34.                }
  35.  
  36.                if ($current_char == '/' && $tag_counter <> 0) $tag_counter -= 2;
  37.   
  38.                if ($current_char == '>') $tag_counter -= 1;
  39.  
  40.                if ($current_char == '"') $quotes_on = TRUE;
  41.            }
  42.            else {
  43.                if ($current_char == '"') $quotes_on = FALSE;
  44.            }
  45.            
  46.            if($tag_counter == 2 || $tag_counter == 0){
  47.                $c++;
  48.            }          
  49.                            
  50.            if ($c > $minimum_length - $length_offset && $tag_counter == 0 && ($next_char == ' ' || $cut_words == TRUE)) {
  51.                $posttext = substr($posttext,0,$i + 1);              
  52.                if($dots){
  53.                    $posttext .= '...';
  54.                }
  55.                return $posttext;
  56.            }
  57.        }
  58.    }  
  59.    return $posttext;
  60. }
  61. ?>


Ten post edytował NuLL 20.05.2006, 12:17:04
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 22:43