|
|
|
| вообщем тема такова.... допустим сделал bbcode в форуме у себя... но возникла проблемка...
Жирный: [big][/big] //сделал так что б bbcode
Наклонный: [l] [/l]
URL: [url] [/url]
---------------------------------------------------
если кто додумаеться написать [big][url][l]softtime.ru[/big][/url][/l]
|
то ясное дело результат будет не валиден в хтмл...
подскажите какую нибудь идею как сделать замену ббкода только если он не пересекаеться... ну или валиден... plz | |
|
|
|
|
|
|
|
для: Sobachka
(21.05.2007 в 22:27)
| | Возможны варианты:
1. Заменяем регулярными выражениями только парные теги, а все пуcтые убираем (или оставляем - как кому нравится)
2. подчитываем количество открывающих и закрывающих тегов. Добавляем недостающие закрывающие. В идеале бы построить дерево документа, но это больно жирно.
Выбирайте. | |
|
|
|
|
|
|
|
для: Loki
(21.05.2007 в 22:39)
| | >Возможны варианты:
>1. Заменяем регулярными выражениями только парные теги, а все пуcтые убираем (или оставляем - как кому нравится)
>2. подчитываем количество открывающих и закрывающих тегов. Добавляем недостающие закрывающие. В идеале бы построить дерево документа, но это больно жирно.
>Выбирайте.
вы чуть-чуть не поняли...
все тэги закрыты...
но располагаються чуток не корректно если заметили... | |
|
|
|
|
|
|
|
для: Sobachka
(22.05.2007 в 00:27)
| | если пользователь их так оставил значит его проблемы имхо | |
|
|
|
|
|
|
|
для: Sobachka
(22.05.2007 в 00:27)
| | >но располагаються чуток не корректно если заметили...
Заметил. Но я всегда считал что некорректный код - проблема того, кто его написал. Bbcode и так упрощены до предела, так что городить проверки, как мне кажется, лишнее. | |
|
|
|
|
|
|
|
для: Loki
(22.05.2007 в 10:03)
| | блин... яж не прошу убеждать меня что лишне... если спрашивал значит требуеться так :( если html терпелив к ошибкам то wml увы нет... | |
|
|
|
|
|
|
|
для: Sobachka
(22.05.2007 в 16:36)
| | В принципе не очень сложно ответить пользоватею правильно он использовал теги или нет... Рег. выражением можно посмотреть, чтобы в самом глубоком теге не закрывались другие.. и так до наружнего... А вот исправиииить да тааак чтобы по задумке пользователя.... | |
|
|
|
|
|
|
|
для: kasmanaft
(22.05.2007 в 17:05)
| | Самому интересно стало) Вот что получилось:
<pre>
<?php
$text = "[big][url][l]softtime.ru[/l][/big][/url]";
while (preg_match("#\[(\w+)\](((?!\[/?\w*]).)*?)\[/\\1\]#", $text))
$text = preg_replace("#\[(\w+)\](((?!\[/?\w*]).)*?)\[/\\1\]#", "", $text);
if (preg_match("#\[/?\w+\]#", $text))
echo "Были допущены ошибки. RTFM, блин... голову морочат тут.";
else echo "Всё норм.";
?>
|
Объясню что оно делает: ищется самый глубокий открытый тег, внутри которого нет других тегов. Потом вместе со своим закрывающим тегом они вырезаются. И так до тех пор, пока есть что вырезать. Если после того, как все вырезали, в тексте остался хотя бы один тег, значит расставлены они были не верно.
Если известны все теги, можно это же сделать спомощью строковых функций. Так будет быстрее работать. | |
|
|
|
|
|
|
|
для: Sobachka
(22.05.2007 в 16:36)
| | А я вас и не убеждаю. Я в первом посте написал что надо сделать: стройте дерево структуры документа и проверяйте его валидность. | |
|
|
|