Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] jak zamknąć otwarte tagi html?
Forum PHP.pl > Forum > Przedszkole
wilman
Witam!
W jaki sposób mogę napisać funkcję, która sprawdzi, czy w podanym ciągu znajdują sie niezamknięte tagi html (np. takie jak <b>) i jeżeli takowe znajdzie, to zamknie je na końcu zmiennej ? smile.gif
rygiel
Pomysł fajny ale lepiej się nauczyć kontrolować siebie albo zaopatrzyć się w edytor który będzie to kontrolował.

w zasadzie alg jest prosty, do tego jeszcze trzeba wyr. regularnych użyć
qrees
Cytat(wilman @ 24.12.2007, 01:24:51 ) *
Witam!
W jaki sposób mogę napisać funkcję, która sprawdzi, czy w podanym ciągu znajdują sie niezamknięte tagi html (np. takie jak <b>) i jeżeli takowe znajdzie, to zamknie je na końcu zmiennej ? smile.gif


A ja proponuje zajrzeć tutaj: http://pl2.php.net/manual/en/ref.tidy.php

Nie tylko pozamyka otwarte tagi, ale poprawi wiele innych błędów związanych z HTML.
Snowak
Nie każdy ma możliwość dodania paru bibliotek. Wyciągnij sobie pregiem wszystkie tagi otwierające a później sprawdzaj poprzez substr_count czy ilość tagów otwierających dany tag = ilość tagów zamykających dany tag, a jeżeli nie to dopisz tyle zamykających ile brakuje.
Black-Berry
Takie coś (jeśli zależy ci na profesjonalnym rozwiązaniu) robi się za pomocą stosu. Podaję opisowy algorytm:
  • 1. Wyszukujesz znak "<"
  • Jeśli przed zakończeniem ">" nie występuje znak "/" (np. <br/>) to wstawiasz to co pomiedzy "<" a ">" na stos.
  • 3. Jeśli napotkasz tag konczoncy "</" wtedy to co pomiedzy "</" a ">" usuwasz ze stosu. Jeśli element na stosie nie odpowiada nowo znalezionemu elementowi kończącemu oznacza to błąd zamknięcia w tym miejscu.

Nie jest to kompletny algorytm ale idea zachowana. Jesli to rozbudujesz będziesz miał dość dobry walidator niezamkniętych tagów.

Pozdrawiam.
wilman
dzieki 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.