Я собирал свой собственный специально созданный форум с использованием 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>
на конец этого.
это очень простой парсер 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>
Смотрите пример бега Вот
Итак, здесь вы хотите разобрать теги 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;
?>