Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Ucinanie stringu a tagi HTML
termin
post 25.02.2008, 10:10:03
Post #1





Grupa: Zarejestrowani
Postów: 113
Pomógł: 1
Dołączył: 13.05.2003
Skąd: Wrocław

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


Witam, uzywam FCKeditor i jego wyniki zapisuje w bazie danych. Problem polega na tym ze ucięcie stringa po 400 znakach w systemie NEWS, nieraz obetnie w miejscu gdzie nie ma zamknięcia taga, a co za tym idzie to wiadomo. Wyprobowałem kilkanaście skrytow znalezionych w internecie, lecz zaden nie działa jak należy. Zazwyczaj znalezione skrypty dotyczyły BBcode, czy ma ktoś z Was rozwiązanie z uwzględnieniem tagów HTML?
Go to the top of the page
+Quote Post
mokry
post 25.02.2008, 11:10:05
Post #2





Grupa: Zarejestrowani
Postów: 374
Pomógł: 23
Dołączył: 3.06.2006
Skąd: Katowice

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


Ja osobiście używam u swoich klientów w systemach newsów małego zabiegu. News'a dziele na dwie części w tabeli: lead i body. Lead wyświetlany jest na liście newsów a body przy widoku rozszerzonym. Nie trzeba wtedy kombinować z zamykaniem tagów.
Jeśli jednak koniecznie chcesz korzystać z substr to proponuję najpierw tekst przelecieć przez strip_tags a potem substr, ale przez to stracisz całkowicie formatowanie tekstu... Całość wrzucasz tylko do jednego <p />


--------------------
Pomogłem? Podziękuj proszę klikając poniżej "POMÓGŁ" ;)
Go to the top of the page
+Quote Post
Kicok
post 25.02.2008, 12:00:03
Post #3





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


  1. <?php
  2.  
  3.  
  4. $text = "
  5. <div> sadsad </div>
  6. <div> 
  7. <div> 
  8. fds asfsa 
  9.  
  10. <p> 
  11. asfs
  12. </p>
  13.  
  14. </div>
  15. asd 
  16. </div> 
  17.  
  18. dsfds 
  19. <b> <i> asfsdf</b> </i> 
  20. dsf
  21.  
  22. <p>
  23. <p>
  24. <b><span class=\"whatever\"><i> dsfdsfdsg <br /> <br> dgdg dsg sd sd sdg g </b> ddsf <u> d d";
  25.  
  26.  
  27.  
  28. // Wyciągamy tagi otwierające i zamykające
  29. preg_match_all( "#<([a-z0-9]+)(?snitch.gif|s[^>]*[^/]>)#si", $text, $open );
  30. preg_match_all( "#</([a-z0-9]+)(?snitch.gif|s[^>]*>)#si", $text, $close );
  31.  
  32.  
  33. // Zamieniamy wszystkie nazwy tagów na pisane małymi literami
  34. $open[1] = array_map( 'strtolower', $open[1] );
  35. $close[1] = array_map( 'strtolower', $close[1] );
  36.  
  37.  
  38. // Wywalamy z tablicy tagów otwierających te, które nie wymagają zamykania
  39. function dontClose( $var )
  40. {
  41. static $tags = array( "br", "hr" );
  42.  
  43. return !in_array( $var, $tags );
  44. }
  45.  
  46. $open[1] = array_filter( $open[1], "dontClose" );
  47.  
  48.  
  49. // Wywalamy z tablicy tagów otwierających te, które są już zamknięte
  50. function tagDiff( $open, $close )
  51. {
  52. foreach( $open as $key => $item )
  53. {
  54. $key2 = array_search( $item, $close );
  55. if( $key2 !== false )
  56. {
  57.  
  58. unset( $open[$key] );
  59. unset( $close[$key2] );
  60. }
  61. } 
  62.  
  63. return $open;
  64. }
  65.  
  66. $open[1] = tagDiff( $open[1], $close[1] );
  67.  
  68.  
  69. // Zamieniamy kolejność tagów do zamknięcia
  70. $open[1] = array_reverse( $open[1] );
  71.  
  72.  
  73. // Zamykamy otwarte tagi
  74. $text .= "r\n</" . implode( ">r\n</", $open[1] ) . ">";
  75.  
  76.  
  77.  
  78. echo $text;
  79.  
  80. ?>


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 17.06.2025 - 10:17