Поправяне на незатворени тагове

metal_head

Registered
Здравейте! Имам Tidy библиотеката на сървъра си. Опитвам се да направя така, че когато някой потребител постне HTML код и някои тагове не са затворени, системата на сайта ми да ги затваря.

С tidy това е супер, само дето този клас ми генерира някои излишни тагове, които вече имам, като <body>, <html>, <head>

Можете да видите сами от примера долу (аз ползвам същия метод).
http://www.php.net/manual/en/tidy.cleanrepair.php

Въпроса ми е има ли начин да използвам tidy така, че да не генерира всичките тези излишни неща или ще трябва да ги махам допълнително след tidy?
 
Малко извън темата:За какво ти е tidy в какъв тип сайт го използваш ?
а по върпоса ти Малко инфо
поразгледай ,защото не знам някой освен теб да е писал тема за tidy във този форум :)
 
Малко извън темата:За какво ти е tidy в какъв тип сайт го използваш ?

Ами аз използвам WYSIWYG текстов редактор за повечето текстови полета (постване във форуми, лични съобщения, статии). Това означава, че тези редактори генерират HTML код, който се записва в базата данни. Идеята на това? Ами излиза, че потребителите изпитват затруднения да маркират линкове и да кликнат бутона, който ще образува BB тагове около него, за да го направят работещ например - тоест BB кодът ги обърква и искам да им е максимално удобно.

Проблемът обаче е, че някои полета имат ограничения за количеството текст, а количеството се определя по броя символи. Тоест може да се случи така, че някои тагове може да не могат да се затворят. Друг случай е, че има някои полета, които са предназначени за EMBED код. Ако там някой сложи неправилен код, може да стане мазало.

Защитил съм се от XSS атаки (ползвам един много хубав клас), така че тая директна работа с HTML не застрашава сайта и потребителите.

А линка, който ми даде има някакъв проблем и ми прави някакво циклично презареждане на страницата - не мога да го отворя.
 
Емии..
След като изведеш данните с preg_replace на дадените [ b ] и ги замениш с < b > може да минеш с това което си дал. Но не съм сигурен дали ще стане :)
 
След като изведеш данните с preg_replace на дадените [ b ] и ги замениш с < b > може да минеш с това което си дал. Но не съм сигурен дали ще стане

Ама аз не ползвам BB код, че да замествам с HTML.
Това, което ми трябва е да сканирам за незатворени тагове и в края на текста примерно да ги затвори всички
 
а как ще разбереш къде трябва да е затворен един таг ?

Ако имаш <span>dsafsgdhfghf<br> откъде ще знаеш къде да затваряш ?
 
Както казах, може всички тагове да се затворят накрая, един след друг.
Друг вариант е таговете, които нямат затварящи се тагове да бъдат изтрити. Нямам представа честно казано как ще стане това. На всичкото отгоре трябва да имам библиотека с таговете предполагам...
 
metal_head каза:
Както казах, може всички тагове да се затворят накрая, един след друг.
Друг вариант е таговете, които нямат затварящи се тагове да бъдат изтрити. Нямам представа честно казано как ще стане това. На всичкото отгоре трябва да имам библиотека с таговете предполагам...

Най-малкото да знаеш ли колко проверки ще направиш само за един таг да не говорим,че както каза ще ти трябва и библиотека да ги събираш и да казваш кое как трябва да стане.
Не знам в какво си се забъркал ама не си хванал никак лесна задача. :wink:
 
Знам, знам. Гадничко е.

Измислих обаче някакво решение.

<p>text</b>

Ще генерира това с Tidy:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title></title>
</head>
<body>
<p>test</p>
</body>
</html>

Да, ама както казах - аз имам клас, който чисти тагове (нещо като strip_tags е, но е доста по-силен и разпознава тагове в "екстремни условия")

Ако съм задал в конструктора тагът P да остане, но нищо друго, това означава, че след всичко ще остане просто <p>test</p>. Проблемът е, че
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
Не е таг и съдържа кавички и не мога да използвам методи за заместване, за да го махна, заради кавичките...ако ги напиша като гот, надали ще работи.
 
Има вариянт при който изчисляваш колко <html> има след което ако примерно го има 1 път, проверяваш дали има 1 път </html> и ако примерно има <p> 2 пъти проверяваш дали има </p> 2 пъти.. :)
 
Да, то точно така трябва да стане, но трябва да имам списък с всички тагове, а не всички тагове се изчерпват с "<" име и ">", някои имат параметри.

Ако има начин как да разкарам това DOCTYPE от стринга, мисля че ще успея да ги направя нещата :)
 

Back
Горе