объясните пожалуйста,как сделать корректную обработку тегов в сообщении.
я нашел только 2 функции
HtmlSpecialChars и strip_tags
я хочу запретить все теги кроме парных <b></b> и <img></img>
с помощья первой функции я могу только запретить все теги,а с помощью второй - не знаю как сделать обработку парности тега,т.е я делаю strip_tags($msg,"<b>") и если сообщение содержит и открывающий и закрывающий теги <b> то все работает,если тег только один то весь остальной текст идет жирным.
Как сделать,если тег не закрыт,чтобы он просто вывелся как тег,а если закрыт - обработался?
Php. запрет тегов
Модератор: Модераторы разделов
-
demongloom
- Сообщения: 454
- Статус: Добрый Демон
Re: Php. запрет тегов
задачка не сложная но решать будет занудно.
попытайся через хмл парсинг...
там просто сразу покажет состояние тэга. открыт, закрыт и т.д.
попытайся через хмл парсинг...
там просто сразу покажет состояние тэга. открыт, закрыт и т.д.
Если жизнь твоя порвется, тебе новую сошьют.
-
Sonic
- Сообщения: 478
Re: Php. запрет тегов
Вот можно так
Или без проверки закрытия, то есть на совести юзера, то вот так... :new_smile:
Sonic добавил в 26.12.2004 12:15
Только надо будет писать не <b>, а как на этом и всех других форумах.
[b]Sonic добавил в 26.12.2004 12:16
За дырявость и красоту кода я не отвечаю взял тут: ссылка
Код: Выделить всё
<?php
// Исходная строка
$postbody = "[ b]Это[ /b] очень жирный [ b]текст[ /b].";
// Результирующая строка
$result = "";
// Вспомогательные переменные
$lastocc = 0;
$sndocc = 1;
while($sndocc)
{
// Начало жирного фрагмента
$fstocc = strpos($postbody, "[ b]", $lastocc);
// Завершение жирного фрагмента
$sndocc = strpos($postbody, "[ /b]", $fstocc);
if(($fstocc>0 && $sndocc>0 && $lastocc>0) || ($fstocc >= 0 && $sndocc>0 && $lastocc == 0))
{
// Помещаем фрагмент до тега [ b] в строку $result
$result .= substr($postbody, $lastocc, $fstocc - $lastocc);
// Жирный фрагмент
$result .= "<b>".substr($postbody, $fstocc + 3, $sndocc - $fstocc - 3)."</b>";
$lastocc = $sndocc + 4;
}
else
{
// Подбираем остатки строки
$result .= substr($postbody,$lastocc,strlen($postbody)-$lastocc);
// Выходим из цикла
break;
}
}
echo $result;
?>Или без проверки закрытия, то есть на совести юзера, то вот так... :new_smile:
Код: Выделить всё
<?php
// Исходная строка
$postbody = "[ b]Это[ /b] очень жирный [ b]текст[ /b].";
$postbody = str_replace("[ b]","<b>",$postbody);
$postbody = str_replace("[ /b]","</b>",$postbody);
echo $postbody;
?>Sonic добавил в 26.12.2004 12:15
Только надо будет писать не <b>, а как на этом и всех других форумах.
[b]Sonic добавил в 26.12.2004 12:16
За дырявость и красоту кода я не отвечаю взял тут: ссылка
LinuxForum.ru :: Форум пользователей ОС Linux
-
ezheg
- Сообщения: 258
- Статус: джидай 3-го уровня
- ОС: Mac OS X
Re: Php. запрет тегов
It Works!
piton3000 добавил в 26.12.2004 15:38
Спасибо большое за помощь,с тегами даже лучше! У самого мозгов не хватило..
Так понимаю идет просто поиск от тега [ b] до [ /b] не смотря на то что юзер может может сделать вложенные теги,хоть это и безсмысленно.
А как это работает на "настоящих" форумах,например здесь?
[b]piton3000 добавил в 26.12.2004 15:54
Проверка [b] 123 [b]
piton3000 добавил в 26.12.2004 15:57
А, понятно,точно так же!
piton3000 добавил в 26.12.2004 15:38
Спасибо большое за помощь,с тегами даже лучше! У самого мозгов не хватило..
Так понимаю идет просто поиск от тега [ b] до [ /b] не смотря на то что юзер может может сделать вложенные теги,хоть это и безсмысленно.
А как это работает на "настоящих" форумах,например здесь?
[b]piton3000 добавил в 26.12.2004 15:54
Проверка [b] 123 [b]
piton3000 добавил в 26.12.2004 15:57
А, понятно,точно так же!