Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Parsowanie i skracanie
Forum PHP.pl > Forum > Przedszkole
qrzysztof
Mam parser, który zamienia mi za pomocą preg_replace znaczniki [ b ][ /b ] na
  1. <span class="bold">\1</span>
oraz [ i ][ /i ] na
  1. <span class="italic">\1</span>
w danych pobieranych z bazy.

Otrzymany w ten sposób kod jest gotowy do wyświetlania na stronie. A właściwie prawie gotowy bo chciałbym go skrócić do 50 znaków (zachowując formatowanie). Skrócić do 50 znaków oczywiście część widoczną w przeglądarce. Da się to jakoś sprytnie zrobić?

Ja to widzę tak: rozbić łańcuch za pomocą znaczników (każdy znacznik to miejsce podziału) i dodawać do siebie długość tych kawałków dopóki nie przekroczy 50. Jeśli przekroczy 50 to ostatni kawałek przyciąć, żeby całość była równa 50 i ewentualnie zamknąć znacznik jeśli ostatni brany pod uwagę kawałek był z wnętrza znacznika. Operacja byłaby mniej kosztowna przed parsowaniem, potem można tak skrócone wyrażenie sparsować.

Może ktoś będzie miał lepszy pomysł.

Wadę tego rozwiązania widzę jedną. O ile parser radził sobie z niedomkniętymi znacznikami (czyli ich nie parsował) to już ta metoda skracania sobie z nimi nie poradzi. Wystarczy, że ktoś źle domknie znacznik i już wyświetli więcej niż 50 znaków.
gothye
np tak :

  1. function truncate($string, $length = 8, $etc = '...', $break_words = False)
  2. {
  3. if ($length == 0)
  4. return '';
  5.  
  6. if (strlen($string) > $length) {
  7. $length -= min($length, strlen($etc));
  8. if (!$break_words && !$middle) {
  9. $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length+1));
  10. }
  11.  
  12. return substr($string, 0, $length) . $etc;
  13.  
  14. } else {
  15. return $string;
  16. }
  17. }



wookieb
Zobacz na mój parser (stopka), tam jest metoda do skracania tekstu (poprawianie tagów oraz odpowiednie zliczanie)
qrzysztof
gothye - a co oznacza zmienna $middle w środku?

wookieb - widziałem wcześniej Twoje rozwiązanie i stwierdziłem, że jest bardzo profesjonalne, ale moja strona to nie forum i nie będę wytaczał armaty żeby zabić muchę. Zajrzę jeszcze raz do tego mimo wszystko i spróbuję odszukać to co mnie interesuje i sprawdzić czy da się to zaadaptować do moich potrzeb.
wookieb
Dlatego parser jest zrobiony tak, abyś mógł wyłączyć niepotrzebne dla siebie filtry. Nawet jeżeli według Ciebie jest armatą to jednak nie jest wcale wolny (spójrz na czasy w teście).
A jeżeli chcesz dobrze skrócić tekst, wyłączając nieistotne tagi (img chociażby), z odpowiednim układem html to będziesz pisał taką samą armatę smile.gif
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.