Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Funkcja zamykająca tagi HTML
ladovnik
post 29.12.2009, 18:10:42
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Witam. Potrzebuję funkcji, która będzie w podanej zmiennej zamykała otwarte, lecz nie zamknięte tagi HTML. Udało mi się coś takiego zrobić, lecz moja funkcja po prostu na końcu zmiennej dodaje brakujące zamknięcia, co zazwyczaj jest niezgodne z W3C (a musi być). Funkcja powinna zamykać dany tag przed pojawieniem się następnego tagu, np. gdy do funkcji wprowadzimy kod:
Kod
<B>Witam! Zapraszam na moją stronę o <U>grach, jest ona <I>najlepsza!</I>

To funkcja powinna zwrócić:
Kod
<B>Witam! Zapraszam na moją stronę o </B><U>grach, jest ona </U><I>najlepsza!</I>

Liczy się, aby było to zgodne z W3C.

Prezentuję poniżej kod mojej funkcji i mam nadzieję, że komuś z Was przyjdzie do głowy jak naprawić ten problem.

  1. function repair_html($str) {
  2. # Define arrays
  3. $tags_open=Array('<b>','<i>','<u>','<a','<p');
  4. $tags_close=Array('</b>','</i>','</u>','</a>','</p>');
  5. $tags_open_num=Array();
  6. $tags_close_num=Array();
  7. $tags_status=Array();
  8.  
  9. # Count opened tags
  10. foreach($tags_open as $id => $tag) {
  11. $tag_big=strtoupper($tag);
  12. $tag_small=strtolower($tag);
  13. $count_big=substr_count($str,$tag_big);
  14. $count_small=substr_count($str,$tag_small);
  15. $count=$count_big+$count_small;
  16.  
  17. $tags_open_num[$id]=$count;
  18. }
  19.  
  20. # Count closed tags
  21. foreach($tags_close as $id => $tag) {
  22. $tag_big=strtoupper($tag);
  23. $tag_small=strtolower($tag);
  24. $count_big=substr_count($str,$tag_big);
  25. $count_small=substr_count($str,$tag_small);
  26. $count=$count_big+$count_small;
  27.  
  28. $tags_close_num[$id]=$count;
  29. }
  30.  
  31. # Count opened but not closed tags
  32. foreach($tags_open as $id => $tag) {
  33. $no_closed=$tags_open_num[$id]-$tags_close_num[$id];
  34. $tags_status[$id]=$no_closed;
  35. }
  36.  
  37. # Close not closed tags
  38. foreach($tags_open as $id => $tag) {
  39. $status=$tags_status[$id];
  40. echo '<b>Status tagu '.htmlspecialchars($tag).' to '.$status.'</b><BR>';
  41. if($status>0) {
  42. $opened_num=$tags_open_num[$id];
  43. echo '- Liczba otwartych tagow: '.$opened_num.'<BR>';
  44. $close_tag=$tags_close[$id];
  45. echo '- Tag zamykajacy: '.htmlspecialchars($close_tag).'<BR>';
  46. for($i=$status;$i<=$opened_num;$i++) {
  47. $str.=$close_tag;
  48. }
  49. }
  50. }
  51.  
  52. return $str;
  53. }
  54.  
  55. $html='<b>Witam! Co tam u ciebie? Ja <i> nic nie robię!';
  56. $html_new=repair_html($html);
  57.  
  58. echo 'Stary kod:<BR>';
  59. echo '<textarea rows="10" cols="100">'.$html.'</textarea><BR>';
  60.  
  61. echo 'Nowy kod:<BR>';
  62. echo '<textarea rows="10" cols="100">'.$html_new.'</textarea><BR>';


Pozdrawiam,
ladovnik

PS To "echo '<b>Status tagu..." itp. jest tylko do testów i wykrywania błędów.

Ten post edytował ladovnik 29.12.2009, 18:13:58
Go to the top of the page
+Quote Post
erix
post 29.12.2009, 18:28:22
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




http://pl.php.net/manual/en/function.substr.php#92063 winksmiley.jpg


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
ladovnik
post 29.12.2009, 19:24:39
Post #3





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Niestety, tamta funkcja robi to samo co moja - dodaje tagi zamykające na samym końcu ciągu sad.gif
Go to the top of the page
+Quote Post
erix
post 29.12.2009, 19:41:07
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Wysiliłbyś się chociaż przejrzeć całą tamtą stronę, a nie tylko to, co Ci palcem pokażą...


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
ladovnik
post 29.12.2009, 20:30:49
Post #5





Grupa: Zarejestrowani
Postów: 60
Pomógł: 1
Dołączył: 25.11.2008
Skąd: Polska

Ostrzeżenie: (10%)
X----


Owszem, sprawdziłem. Poza tą funkcją, którą wskazałeś, żadna inna nie zamyka tagów (wszystkie potencjalne testowałem). Możliwe jednak, że coś przeoczyłem, dlatego jeśli znalazłeś tam jakaś funkcję poprawnie działającą to z łaski swojej podpowiedz mi która to winksmiley.jpg

Ten post edytował ladovnik 29.12.2009, 20:31:47
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: 19.07.2025 - 20:57