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

PHP检查用户提交内容中的匹配标记,php,tags,match,forum,Php,Tags,Match,Forum,我一直在用PHP组装我自己定制的论坛,它的出现令人震惊,但我想知道是否有办法检查匹配的BBCode标记?我已经设置了自己的数组以替换为[b]等等,但我希望能够确保标记在某个点关闭[/b],而不会继续从文章中跑出并进入页面的其余部分 例如:[b]这是文本将显示为[b]这是文本,[b]这是文本[/b]将在页面上返回为这是文本 有没有办法做到这一点,或者在PHP/HTML中有没有办法“转义”任何打开的标记?IE;如果帖子中没有[/b],则自动在其末尾添加a。因此,如果您想用HTML标记解析BBCode

我一直在用PHP组装我自己定制的论坛,它的出现令人震惊,但我想知道是否有办法检查匹配的BBCode标记?我已经设置了自己的数组以替换为[b]等等,但我希望能够确保标记在某个点关闭[/b],而不会继续从文章中跑出并进入页面的其余部分

例如:[b]这是文本将显示为[b]这是文本,[b]这是文本[/b]将在页面上返回为这是文本


有没有办法做到这一点,或者在PHP/HTML中有没有办法“转义”任何打开的标记?IE;如果帖子中没有[/b],则自动在其末尾添加a。

因此,如果您想用HTML标记解析BBCode标记,我在web上发现了一个小功能,它可以非常轻松地完成您的工作

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

?>

这是一个非常简单的bbcode解析器,可满足您的需求:

函数bbcode$数据 { $input=数组 “/\[b\].?\[\/b\]/is”, “/\[b\].*?$/”, ; $output=array '$1', '$1', ; 返回preg_replace$input、$output、$data;; } 一些例子:


请参见运行的示例

这不是@TheElm想要的答案。他说,如果bbcode没有关闭,在末尾添加相应的关闭标记。这个正则表达式非常有用,还有rogello的答案,在关闭后让它关闭标记。谢谢你的回答!只是一个注释,对于其他标记,您需要使用相同的正则表达式执行相同的操作。
bbcode('[b]text[/]');
//returns <b>text</b>

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