Проверка PHP на совпадение тегов в пользовательском контенте

Я собирал свой собственный специально созданный форум с использованием PHP, и он изумительно продвигается вперед, но я пытался выяснить, есть ли способ проверить соответствие тегов BBCode? У меня есть свои собственные массивы для замены <b> с [b] и так далее, но я хочу быть в состоянии убедиться, что теги будут закрыты в какой-то момент [/b] и не продолжать убегать от поста и на остальную часть страницы.

Например: [b]This is text будет отображаться как [b]This is text, а также [b]This is text[/b] вернется на страницу как <b>This is text</b>

Есть ли способ сделать это, или есть способ в PHP / HTML «экранировать» любые открытые теги? IE; если нет [/b] в сообщении, автоматически добавить </b> на конец этого.

0

Решение

это очень простой парсер bbcode для вашего требования:

function bbcode($data)
{
$input = array(
'/\[b\](.*?)\[\/b\]/is',
'/\[b\](.*?)$/',
);
$output = array(
'<b>$1</b>',
'<b>$1</b>',
);
return preg_replace ($input, $output, $data);;
}

Некоторые примеры:

bbcode('[b]text[/]');
//returns <b>text</b>

bbcode('[b]text');
//returns <b>text</b>

Смотрите пример бега Вот

0

Другие решения

Итак, здесь вы хотите разобрать теги BBCode с тегами HTML, вот небольшая функция, которую я нашел в Интернете, которая может довольно легко выполнить вашу работу

<?php

/* Simple PHP BBCode Parser function */

//BBCode Parser function

function showBBcodes($text) {

// BBcode array
$find = array(
'~\[b\](.*?)\[/b\]~s',
'~\[i\](.*?)\[/i\]~s',
'~\[u\](.*?)\[/u\]~s',
'~\[quote\](.*?)\[/quote\]~s',
'~\[size=(.*?)\](.*?)\[/size\]~s',
'~\[color=(.*?)\](.*?)\[/color\]~s',
'~\[url\]((?:ftp|https?)://.*?)\[/url\]~s',
'~\[img\](https?://.*?\.(?:jpg|jpeg|gif|png|bmp))\[/img\]~s'
);

// HTML tags to replace BBcode
$replace = array(
'<b>$1</b>',
'<i>$1</i>',
'<span style="text-decoration:underline;">$1</span>',
'<pre>$1</'.'pre>',
'<span style="font-size:$1px;">$2</span>',
'<span style="color:$1;">$2</span>',
'<a href="$1">$1</a>',
'<img src="$1" alt="" />'
);

// Replacing the BBcodes with corresponding HTML tags
return preg_replace($find,$replace,$text);
}

// How to use the above function:

$bbtext = "This is [b]bold[/b] and this is [u]underlined[/u] and this is in [i]italics[/i] with a [color=red] red color[/color]";
$htmltext = showBBcodes($bbtext);
echo $htmltext;

?>
-1

По вопросам рекламы [email protected]