Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] [klasa] AlphaStreamCutter - automatyczny łamacz linii
Forum PHP.pl > Inne > Oceny
SoofMan
(Użyłem wyszukiwarki i widzę że nie było takiego tematu, ale mogę się mylić. Jak było coś podobnego, to temat można skasować)

Witam,

Nudziło mi się ostatnio i oprócz gry w Heroes 3, którego jestem maniakiem winksmiley.jpg postanowiłem też napisać na bazie algorytmu PHP Compactera - automatyczny obcinacz/łamacz za długich linii tekstu.

Przyszło mi to do głowy, bo zauważyłem że na wielu forach są straszne problemy z linkami które potrafią totalnie rozjechać całą stronę. Jak widzę, na tym forum problem jest już rozwiązany.

Klasa przetwarza i łamie dowolny STRING analizując go bajt po bajcie - tak jak to robił PHP Compacter, z tym że obsługuje Czysty Text, HTML oraz BBCode.

Pobrać można jak zawsze stąd:

http://hypercacher.com/download_pl.html



Przykładowe wywołania do przerabiania poszczególnych typów textu:

Przerabianie zwykłego tekstu:

  1. <?php
  2. $stream = file_get_contents('Text_zwykly.txt');
  3. $ct1 = new AlphaStreamCutter(0, 0, 40);
  4. $output = $ct1->CompactTextStream($stream);
  5. ?>


Przerabianie kodu HTML:

  1. <?php
  2. $stream = file_get_contents('Test001.html');
  3. $ct1 = new AlphaStreamCutter(1, 0, 40);
  4. $output = $ct1->CompactTextStream($stream);
  5. ?>


Przerabianie Text+BBCode:

  1. <?php
  2. $stream = file_get_contents('text_z_BBcode.txt');
  3. $ct1 = new AlphaStreamCutter(2, 0, 40);
  4. $output = $ct1->CompactTextStream($stream);
  5. ?>



Gdzie parametr o wartości 40 - to maksymalna długość ciągu.


Początek klasy wygląda tak:
  1. <?php
  2. class AlphaStreamCutter {
  3.  
  4. //This are the acceptable BBCode tags. Warning !!: They must be uppercase. Put you
    r custom BBCode tags in here to be recognized by this script
  5. var $arrBBCodeTagsList = array('URL', 'QUOTE', 'IMG', 'CODE', 'SIZE', 'COLOR');
  6.  
  7. //This regulates if the input string should be treated as HTML
  8. var $intInputTextFormat = false;
  9.  
  10. //This sets the string that will be used as line break
  11. var $strOutputLineBreakString = "n"; 
  12.  
  13. //How many characters can there be in one line before it is broken
  14. var $intMaxCharactersInLine = 80;
  15. ?>
Zajec
Jeśli klasa ma być wygodna w używaniu, to jako pierwszy argument podawałbym stringa, a nie liczbę. Mało to przyjemne, pamiętać jaka liczba oznacza tekst, jaka HTML, a jaka BBCODE.

Inna sprawa, że klasa jest *chyba* dość mało przydatna? Znakomita większość tekstu umieszczanego na stronach nie jest pisana fontem o stałej szerokości znaków. Natomiast gdy już taki font jest używany, to zazwyczaj do zapisania kodu programu/strony, który lepiej wygląda gdy nie jest łamany.

P.S.
Polecam Wesnoth ;-) Uwaga, gra portafi wciągnąć :-)
batman
Szczerze przyznam, że nie widzę sensu tworzenia takiej klasy. Jeśli jakiś string jest za długi, to obcinam go przy pomocy substr lub mb_substr. A jeśli nie chcę obcinać, tylko zawinąć to używam wordwrap.
SoofMan
Cytat(batman @ 22.07.2007, 20:57:28 ) *
Szczerze przyznam, że nie widzę sensu tworzenia takiej klasy. Jeśli jakiś string jest za długi, to obcinam go przy pomocy substr lub mb_substr. A jeśli nie chcę obcinać, tylko zawinąć to używam wordwrap.


Ale nie przewidziałeś że jak utniesz TAG html albo BBCode w połowie, to cały kod ci się rozleci i efekt końcowy będzie różny od zamierzonego...

Ta klasa obcina text i dodatkowo przy tym uważa żeby nie popsuć tagów.
batman
Jakoś nigdy nie miałem z tym problemu. Jeśli muszę obciąć jakiś tekst z tagami HTML to je wpierw usuwam. A dlaczego? Ano dlatego, że jeśli wytnę wszystko po setnym znaku i okaże się że wyciąłem zamknięcie tabeli, będzie jeszcze gorzej.
SoofMan
Cytat(batman @ 22.07.2007, 21:44:58 ) *
Jakoś nigdy nie miałem z tym problemu. Jeśli muszę obciąć jakiś tekst z tagami HTML to je wpierw usuwam. A dlaczego? Ano dlatego, że jeśli wytnę wszystko po setnym znaku i okaże się że wyciąłem zamknięcie tabeli, będzie jeszcze gorzej.


Wiesz.... tutaj akurat chodzi o wstawianie tekstu do forum lub systemu komentarzy. Taki tekst ma często atrybuty - takie jak dodatkowe kolory, pogrubienie, ukośny tekst które realizowane są w HTMLu/BBCode.

Tam nie masz wyjścia - jak masz tekst z BBCode to musisz go wstawić razem z BBCode. A jeżeli BBCode przerabiasz najpierw na HTML, to i tak ten HTML musisz wstawić do bazy.

A jeżeli wstawiasz HTML do bazy i wstawisz NIEPORAWNY, to już zostanie niepoprawny i przy jego wyświetlaniu strona będzie się rozjeżdżać...
batman
Cytat
A jeżeli wstawiasz HTML do bazy i wstawisz NIEPORAWNY, to już zostanie niepoprawny i przy jego wyświetlaniu strona będzie się rozjeżdżać...

Zgadza się. Jednak chodzi mi o to, że gdy wstawiam do bazy jakiś komentarz, to wstawiam wszystko, a nie obcinam do iluś znaków. Tekst się obcina po to, by wyświetlić fragment wiadomości w mailu, kanale rss lub na liście wiadomości. I jeśli w tym miejscu usuniesz zamknięcie tabeli, listy lub innego elementu html, wówczas wszystko się rozjedzie. I dlatego w takich miejscach usuwam znaki html, a do zabawy z ciągiem używam funkcji, które wymieniłem w pierwszym poście.
SoofMan
Cytat(batman @ 23.07.2007, 08:27:40 ) *
Zgadza się. Jednak chodzi mi o to, że gdy wstawiam do bazy jakiś komentarz, to wstawiam wszystko, a nie obcinam do iluś znaków. Tekst się obcina po to, by wyświetlić fragment wiadomości w mailu, kanale rss lub na liście wiadomości. I jeśli w tym miejscu usuniesz zamknięcie tabeli, listy lub innego elementu html, wówczas wszystko się rozjedzie. I dlatego w takich miejscach usuwam znaki html, a do zabawy z ciągiem używam funkcji, które wymieniłem w pierwszym poście.


Tak też można. To jedno z możliwych rozwiązań problemu.

Ale jeżeli chcesz mieć w bazie HTML/BBCode to wtedy taki skrypt/klasa jest potrzebny(a).
batman
Mam w bazie HTML i nie używałem do tego tej klasy.
SoofMan
Cytat(batman @ 23.07.2007, 20:20:12 ) *
Mam w bazie HTML i nie używałem do tego tej klasy.


biggrin.gif

Przecież nikt cię nie zmusza, spokojnie - luz winksmiley.jpg
batman
W każdym bądź razie poznaliśmy swoje zdania na temat tej klasy. Niech inni też oceniają. winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.