从字符串中删除BBCode URL标记

时间:2014-06-17 10:33:49

标签: javascript php html regex htmlpurifier

我试图制作一个稳定的系统,允许用户将BB / Html代码的任何混合物粘贴到输入中,我将根据需要清理和删除数据。

内容是从论坛复制的,问题是它们似乎都使用不同的代码。有些显示不止一个,有些使用自闭合br标签。其他人使用[URL =]而其他人只使用[URL] URL [/ URL]等。

到目前为止,我使用HTMLpurifier删除除img标记之外的所有内容。

HTMLpurifier并不(据我所知)删除BBCode。所以,给出一个像这样的字符串:

[URL=http://awebsite.com]My Link [IMG]imagelink.png[/IMG][/URL]

如何删除网址标记,只留下IMG标记。

我想删除所有网址标记选项,以便提供给定的网址和文本,这可能会很困难。

到目前为止,我已经通过使用REGEX转换[IMG]标签等进行了很大的工作但是我觉得有太多的变种来硬编码。

有关更有效的方式/可能的方法删除网址标记的任何建议吗?

2 个答案:

答案 0 :(得分:1)

选项1

如果您只想删除[URL=http://awebsite.com][/URL]等标记,将内容保留在内,则正则表达式很简单:

搜索:\[/?URL[^\]]*\]

替换:空字符串

在JavaScript中

replaced = string.replace(/\[\/?URL[^\]]*\]/g, "");

在PHP中

$replaced = preg_replace('%\[/?URL[^\]]*\]%', '', $str);

选项2:同时删除MyLink

等内容

在此,我们将替换[URL...]之后不是其他标记的内容。

搜索:\[URL[^\]]*\][^\[\]]*|\[/URL[^\]]*\]

替换:空字符串

<强> JavaScript的:

replaced = string.replace(/\[URL[^\]]*\][^\[\]]*|\[\/URL[^\]]*\]/g, "");

<强> PHP:

$replaced = preg_replace('%\[URL[^\]]*\][^\[\]]*|\[/URL[^\]]*\]%', '', $str);

答案 1 :(得分:0)

解决方案可能是使用正则表达式仅提取IMG个标记:

$pattern ="#\[IMG\](https?://[-\w\.]+(:\d+)?/[\w/_\.]*(\?\S+?)?)?\[\/IMG\]#";
$str = "[URL=http://awebsite.com]My Link [IMG]http://google.com/imagelink.png[/IMG][/URL]";
preg_match($pattern, $str, $matches);
print_r($matches);

结果:

Array
(
    [0] => [IMG]http://google.com/imagelink.png[/IMG]
    [1] => http://google.com/imagelink.png
)