Предлогаю выкладывать сюда полезные решения на php, помоему будет прикольно, перед тем как создать тему человек идет сюды и смотрит есть ли тут готовый пример ну или идет в гугл ) Вот от меня преобразование BB-тегов в соответствующие HTML-теги. PHP: <?php function bth($content) { // Переносы строк $content = nl2br($content); // Горизонтальная линия $content = str_replace("[HR]", "<hr />", $content); // Жирный, Курсив (Наклонный), Подчеркнутый, Перечеркнутый $content = preg_replace("/\[B\](.+?)\[\/B\]/", "<b>\\1</b>", $content); $content = preg_replace("/\[I\](.+?)\[\/I\]/", "<i>\\1</i>", $content); $content = preg_replace("/\[U\](.+?)\[\/U\]/", "<u>\\1</u>", $content); $content = preg_replace("/\[S\](.+?)\[\/S\]/", "<s>\\1</s>", $content); // Нижний и верхний регистр $content = preg_replace("/\[SUB\](.+?)\[\/SUB\]/", "<sub>\\1</sub>", $content); $content = preg_replace("/\[SUP\](.+?)\[\/SUP\]/", "<sup>\\1</sup>", $content); // Мелкий шрифт $content = preg_replace("/\[SMALL\](.+?)\[\/SMALL\]/", "<small>\\1</small>", $content); // Нестандартный шрифт $content = preg_replace("/\[FONT=(.+?)\](.+?)\[\/FONT\]/", "<font face=\"\\1\">\\2</font>", $content); // Название шрифта $content = preg_replace("/\[SIZE=(.+?)\](.+?)\[\/SIZE\]/", "<font size=\"\\1\">\\2</font>", $content); // Цвет шрифта $content = preg_replace("/\[COLOR=(.+?)\](.+?)\[\/COLOR\]/", "<font color=\"\\1\">\\2</font>", $content); // Выравнивание (По левому краю, По центру, По правому краю) $content = preg_replace("/\[LEFT\](.+?)\[\/LEFT\]/", "<div align=\"left\">\\1</div>", $content); $content = preg_replace("/\[CENTER\](.+?)\[\/CENTER\]/", "<div align=\"center\">\\1</div>", $content); $content = preg_replace("/\[RIGHT\](.+?)\[\/RIGHT\]/", "<div align=\"right\">\\1</div>", $content); // Ссылки $content = preg_replace("/\[URL\](.+?)\[\/URL\]/", "<a href=\"\\1\" target=\"_blank\">\\1</a>", $content); $content = preg_replace("/\[URL=(.+?)\](.+?)\[\/URL\]/", "<a href=\"\\1\" target=\"_blank\">\\2</a>", $content); // E-Mail $content = preg_replace("/\[EMAIL\](.+?)\[\/EMAIL\]/", "<a href=\"mailto:\\1\">\\1</a>", $content); $content = preg_replace("/\[EMAIL=(.+?)\](.+?)\[\/EMAIL\]/", "<a href=\"mailto:\\1\">\\2</a>", $content); // Изображение $content = preg_replace("/\[IMG\](.+?)\[\/IMG\]/", "<img src=\"\\1\" border=\"0\" alt=\"\">", $content); $content = preg_replace("/\[IMG=(.+?)\](.+?)\[\/IMG\]/", "<img src=\"\\1\" border=\"0\" alt=\"\\2\">", $content); // Список $content = preg_replace("/\[LIST\](.+?)\[\/LIST\]/", "<ul type=\"square\">\\1</ul>", $content); $content = preg_replace("/\[LIST=(.+?)\](.+?)\[\/LIST\]/", "<ul type=\"\\1\">\\2</ul>", $content); $content = preg_replace("/\[\*\](.+?)\[\/\*\]/", "<li>\\1</li>", $content); // Цитата $content = preg_replace("/\[Q\](.+?)\[\/Q\]/", "<b>Цитата:</b><br /><div class=\"quote\">\\1</div>", $content); // Смайлики $content = preg_replace("/:(.+?):/", "<img src=\"/images/smiles/\\1.gif\" border=\"0\">", $content); return $content; } // Тест функции $text = "[HR]Жирный"; $text = bth($text); echo $text; ?>
ЧТО??? ИМХО даже в phpbb 1.0 не было такой защиты... Чуть поправил (правил на ходу, поэтому могут быть всякие parse-ошибки...) PHP: <?php function bth($content) { // Переносы строк $content = nl2br($content); // Горизонтальная линия $content = str_replace("[HR]", "<hr />", $content); // Жирный, Курсив (Наклонный), Подчеркнутый, Перечеркнутый $content = preg_replace("/\[B\](.+?)\[\/B\]/", "<b>\\1</b>", $content); $content = preg_replace("/\[I\](.+?)\[\/I\]/", "<i>\\1</i>", $content); $content = preg_replace("/\[U\](.+?)\[\/U\]/", "<u>\\1</u>", $content); $content = preg_replace("/\[S\](.+?)\[\/S\]/", "<s>\\1</s>", $content); // Нижний и верхний регистр $content = preg_replace("/\[SUB\](.+?)\[\/SUB\]/", "<sub>\\1</sub>", $content); $content = preg_replace("/\[SUP\](.+?)\[\/SUP\]/", "<sup>\\1</sup>", $content); // Мелкий шрифт $content = preg_replace("/\[SMALL\](.+?)\[\/SMALL\]/", "<small>\\1</small>", $content); // Нестандартный шрифт $content = preg_replace("/\[FONT=([^\"]+?)\](.+?)\[\/FONT\]/", "<font face=\"\\1\">\\2</font>", $content); // Название шрифта $content = preg_replace("/\[SIZE=(\d+?)\](.+?)\[\/SIZE\]/", "<font size=\"\\1\">\\2</font>", $content); // Цвет шрифта $content = preg_replace("/\[COLOR=([^\"]+?)\](.+?)\[\/COLOR\]/", "<font color=\"\\1\">\\2</font>", $content); // Выравнивание (По левому краю, По центру, По правому краю) $content = preg_replace("/\[LEFT\](.+?)\[\/LEFT\]/", "<div align=\"left\">\\1</div>", $content); $content = preg_replace("/\[CENTER\](.+?)\[\/CENTER\]/", "<div align=\"center\">\\1</div>", $content); $content = preg_replace("/\[RIGHT\](.+?)\[\/RIGHT\]/", "<div align=\"right\">\\1</div>", $content); // Ссылки $content = preg_replace("/\[URL\]([a-z]+?)(:\/\/)([^\"]+?)\[\/URL\]/", "<a href=\"\\1\\2\\3\" target=\"_blank\">\\1</a>", $content); $content = preg_replace("/\[URL=([a-z]+?)(:\/\/)[^\"]+?)\](.+?)\[\/URL\]/", "<a href=\"\\1\\2\\3\" target=\"_blank\">\\2</a>", $content); $content = preg_replace("/\[URL\]([^\"]+?)\[\/URL\]/", "<a href=\"http:\/\/\\1\" target=\"_blank\">\\1</a>", $content); $content = preg_replace("/\[URL=([^\"]+?)\](.+?)\[\/URL\]/", "<a href=\"http:\/\/\\1\" target=\"_blank\">\\2</a>", $content); // E-Mail $content = preg_replace("/\[EMAIL\]([^\"]+?)\[\/EMAIL\]/", "<a href=\"mailto:\\1\">\\1</a>", $content); $content = preg_replace("/\[EMAIL=([^\"]+?)\](.+?)\[\/EMAIL\]/", "<a href=\"mailto:\\1\">\\2</a>", $content); // Изображение $content = preg_replace("/\[IMG\](http:\/\/)([^\"]+?)\[\/IMG\]/", "<img src=\"\\1\\2\" border=\"0\" alt=\"\">", $content); $content = preg_replace("/\[IMG=(http:\/\/)([^\"]+?)\](.+?)\[\/IMG\]/", "<img src=\"\\1\\2\" border=\"0\" alt=\"\\2\">", $content); $content = preg_replace("/\[IMG\]([^\"]+?)\[\/IMG\]/", "<img src=\"http:\/\/\\1\" border=\"0\" alt=\"\">", $content); $content = preg_replace("/\[IMG=([^\"]+?)\](.+?)\[\/IMG\]/", "<img src=\"http:\/\/\\1\" border=\"0\" alt=\"\\2\">", $content); // Список $content = preg_replace("/\[LIST\]([^\"]+?)\[\/LIST\]/", "<ul type=\"square\">\\1</ul>", $content); $content = preg_replace("/\[LIST=([^\"]+?)\](.+?)\[\/LIST\]/", "<ul type=\"\\1\">\\2</ul>", $content); $content = preg_replace("/\[\*\](.+?)\[\/\*\]/", "<li>\\1</li>", $content); // Цитата $content = preg_replace("/\[Q\](.+?)\[\/Q\]/", "<b>Цитата:</b><br /><div class=\"quote\">\\1</div>", $content); // Смайлики $content = preg_replace("/:(.+?):/", "<img src=\"/images/smiles/\\1.gif\" border=\"0\">", $content); return $content; }
да глупая затея, есть уйма ресурсов где можно найти нужные тебе скрипты. Их там тысячи, просто внимательнее глянуть нужно.
кошмарный коды, что у первого что у второго. Забыли про ` это фуфло. А вот что забыли про то что бб теги можно поставить внутрь друг друга. И все ваши фильтры быстренько наепнуться.
2 k1b0rg я и не претендовал на bulletproof код! Я лишь хотел указать автору на ПОЛНОЕ отсутствие фильтрации! На то, чтобы превратить этот код во что-то, мне надо ещё минут 10, но надо ли это, учитывая, что кода, выполняющего данную конкретную функцию дофига и больше - НЕТ!
А про обратный апостраф я что-то не врубил - зафиг его фильтровать, если кавычки и спаренные не пройдут и в тэг не выйдешь?
ппц, тема сплошной лол Всё это отговорки... Признайте свои ошибки, и старайтесь не делать их в будущем!
NeX, нафига выложил мой дырявый сркипт бб-кодов )) Я даже знаю где ты его взял - http://slaed.net/index.php?name=Forums&file=viewtopic&t=3365 . Кстати, кто интересуется полезными решениямы, читает по ссылке выше. Там я выкладывал, некоторые даже довольно-таки неплохие решения. Но опыта меньше было - посему дырявее
меня всегда мучал один вопрос - почему многие кодеры пишут: PHP: "<img src=\"/images/smiles/\\1.gif\" border=\"0\">" когда с одинарными кавычками код более удобно читать? PHP: "<img src='/images/smiles/\\1.gif' border='0'>"
Дикс, вообще двойные кавычки в Html - это как правило хорошего тона, так скажем, и общепринятая традиция. А вот в Php - другой вопрос. Например я пишу двойные только по привычке.
не знаю причём здесь хороший тон, но если это удобней читать и не является ошибкой синтаксиса, я считаю стоит юзать одинарные. к тому же имхо они красивее
Тоже не понимаю причем тут правила хорошего тона. всегда стараюсь везде в html ставить одинакрную ковычку
Дикс, на вкус и цвет... В общем мне не нравится одинарная, да и нигде в мануалах и в ихсодниках w3 не видел одинарных. Разве что в JavaScript, заключенного в двойные кавычки. Давай не будет тут разжить войны и споры, а просто скинем по полезному решению )) Вот вам так называемый аналог AJaX Code: <script type="text/javascript"> //<![CDATA[ function CRO() { if (window.XMLHttpRequest) { var object = new XMLHttpRequest(); } else { var object = new ActiveXObject('Msxml2.XMLHTTP'); if (!object) { var object = new ActiveXObject('Microsoft.XMLHTTP'); } } return object; } function GetRequest(link, post) { var request = CRO(); request.onreadystatechange = function() { if (request.readystate == 4 && request.status == 200) { eval(request.responsetext); } }; request.open("POST", link, true); request.setrequestheader("Content-Type", "application/x-www-form-urlencoded"); request.send(post); } //]]> </script> <!-- Поместите в файл http://localhost/rand.php следующий код: alert("<?php echo rand(1, 999)." | POST 1 = ".$_POST['post1']." | POST 2 = ".$_POST['post2']; ?>"); В результате вы получите примерно такую строку: 555 | POST 1 = test1 | POST 2 = test2 --> <a href="#" onclick="javascript:GetRequest('http://localhost/rand.php', 'post1=test1&post2=test2');">TEST</a>