我试图制作一个稳定的系统,允许用户将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]标签等进行了很大的工作但是我觉得有太多的变种来硬编码。
有关更有效的方式/可能的方法删除网址标记的任何建议吗?
答案 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
)