PHP检查用户提交的内容中的匹配标记

时间:2014-10-11 02:55:36

标签: php tags match forum

我一直在使用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>

2 个答案:

答案 0 :(得分: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>

请参阅运行here

的示例

答案 1 :(得分:-1)

所以在这里你要用HTML标签解析BBCode标签,这是我在网上发现的一个小功能,可以很容易地完成你的工作

<?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;

?>