我需要一个函数来自动添加bbcode。如何REGEX一个url和autoadd [url]标签并修复重复
- 用户使用我的编辑器类型的东西。
- 提交后,会运行一个自动链接()php函数。
- 如果文字内容有URL将被自动添加[URL] XXX [/ URL]
我能做到这一点。但设置高亮编辑器也许使用2格式的URL
A. [URL] XX [/ URL] B. [URL = XXX] XXX [/ URL]
我无法修复重复的问题。这里的演示代码
$content="
http://www.google.com/logo.png
[url]http://www.yahoo.com[/url]
[url=http://yahoo.com/abc.zip]DownLoad[/url]";
$content = nl2br($content);
echo linkAdd($content);
//auto add link
function linkAdd($content){
preg_match_all('~\[url=((?:ftp|https?)://.*?)\](.*?)\[/url\]~s', $content, $stack);
foreach($stack[1] as $t) {
$content = preg_replace('~\[url=((?:ftp|https?)://.*?)\](.*?)\[/url\]~s','[url=\\1]\\2[/url]', $content,1);
}
preg_match_all('~\[url](.*?)\[/url\]~s', $content, $stack);
foreach($stack[1] as $t) {
$content = preg_replace('~\[url](.*?)\[/url\]~s',$t, $content,1);
}
$str=preg_replace('(((f|ht){1}tp://)[[email protected]:%_/+.~#?&//=]+)','[url]\\0[/url]',$content);
return $str;
}
现在结果
[url]http://www.google.com/logo.png[/url]
[url]http://www.yahoo.com[/url]
[url=[url]http://yahoo.com/abc.zip[/url]]DownLoad[/url]
线之一,线路二是确定。
但3号线再次重复[URL] XXX [/ URL]
how to be
[url=[url]http://yahoo.com/abc.zip[/url]]DownLoad[/url]
to
[url=http://yahoo.com/abc.zip]DownLoad[/url]
哇!如此清晰和简单的代码。 我明白了,非常感谢你,jmleroux! – Sky 2014-11-05 13:33:39
嗨,jmleroux。我想跳过[img]标签,在“[-a-z0-9 @:%_/+。〜#”之后添加此代码“〜\ [img \](。*?)\ [/ img \]〜s” ?&=] +“为什么不工作?你能再帮助我吗?谢谢。 – Sky 2014-11-06 09:37:05
你能举出输入和预期输出的例子吗?如果使用你的代码不能编辑,请使用 – jmleroux 2014-11-06 10:16:52