网址自动加链接和ubb代码冲突的问题,怎么解决?

时间:2021-07-13 18:02:52
preg_replace("#((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)#i","<a   href=\\1 target=_blank>\\1</a>",$text);

上面是给一段文字里面的网址自动加链接的,但是有的ubb代码的链接不能自动加链接,要怎么排除?因为ubb会自动转换为链接。
比如这个: http://bbs.csdn.net/topics/new?forum_id=PHPBase
怎么排除有[url]或者[img]这种标签里面的链接不要自动加链接?或者有没有其它正则可以做到?
谢谢!

10 个解决方案

#1


比如这个:【ubb】http://bbs.csdn.net/topics/new?forum_id=PHPBase【/ubb】

#2


或者说我又要对ubb代码转换,又要对没有被ubb代码包起来的网址自动加上链接,怎么做到?

#3


试试
preg_replace("#(?<!\[ubb\])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)(?!\[\/ubb\])#i","<a   href=\\1 target=_blank>\\1</a>",$text);

#4


$text =<<< TXT
上面是给一段文字里面的网址自动加链接的,但是有的ubb代码的链接不能自动加链接,要怎么排除?因为ubb会自动转换为链接。
比如这个:http://bbs.csdn.net/topics/new?forum_id=PHPBase
比如这个:【ubb】http://bbs.csdn.net/topics/new?forum_id=PHPBase【/ubb】
TXT;
echo preg_replace("#([^】])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)(?>=【)?#isu","$1<a   href=$2 target=_blank>$2</a>",$text);
上面是给一段文字里面的网址自动加链接的,但是有的ubb代码的链接不能自动加链接,要怎么排除?因为ubb会自动转换为链接。
比如这个:<a   href=http://bbs.csdn.net/topics/new?forum_id=PHPBase target=_blank>http://bbs.csdn.net/topics/new?forum_id=PHPBase</a>
比如这个:【ubb】http://bbs.csdn.net/topics/new?forum_id=PHPBase【/ubb】

#5


引用 3 楼 jordan102 的回复:
试试
preg_replace("#(?<!\[ubb\])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)(?!\[\/ubb\])#i","<a   href=\\1 target=_blank>\\1</a>",$text);


好象可以,但是不是[ubb\]标签,上面1楼写错,应该是[img]和[url]这些标签,可以把[ubb\]换成[url\],但只能排除一个标签,怎么写可以排除多个?如还要排除[img\]

#6


引用 4 楼 xuzuning 的回复:
$text =<<< TXT
上面是给一段文字里面的网址自动加链接的,但是有的ubb代码的链接不能自动加链接,要怎么排除?因为ubb会自动转换为链接。
比如这个:http://bbs.csdn.net/topics/new?forum_id=PHPBase
比如这个:【ubb】http://bbs.csdn.net/topics/new?forum_id=PHPBase【/ubb】
TXT;
echo preg_replace("#([^】])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)(?>=【)?#isu","$1<a   href=$2 target=_blank>$2</a>",$text);
上面是给一段文字里面的网址自动加链接的,但是有的ubb代码的链接不能自动加链接,要怎么排除?因为ubb会自动转换为链接。
比如这个:<a   href=http://bbs.csdn.net/topics/new?forum_id=PHPBase target=_blank>http://bbs.csdn.net/topics/new?forum_id=PHPBase</a>
比如这个:【ubb】http://bbs.csdn.net/topics/new?forum_id=PHPBase【/ubb】


====
这个【】号其实是[]这个号,因为个写成[]时在这里会自动转成链接看不到,所以写成【】

#7


你自己换一下不就行了?
$text =<<< TXT
上面是给一段文字里面的网址自动加链接的,但是有的ubb代码的链接不能自动加链接,要怎么排除?因为ubb会自动转换为链接。
比如这个:http://bbs.csdn.net/topics/new?forum_id=PHPBase
比如这个:[ubb]http://bbs.csdn.net/topics/new?forum_id=PHPBase[/ubb]
TXT;
echo preg_replace("#([^]])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)#isu","$1<a   href=$2 target=_blank>$2</a>",$text);

#8


引用 7 楼 xuzuning 的回复:
你自己换一下不就行了?
$text =<<< TXT
上面是给一段文字里面的网址自动加链接的,但是有的ubb代码的链接不能自动加链接,要怎么排除?因为ubb会自动转换为链接。
比如这个:http://bbs.csdn.net/topics/new?forum_id=PHPBase
比如这个:[ubb]http://bbs.csdn.net/topics/new?forum_id=PHPBase[/ubb]
TXT;
echo preg_replace("#([^]])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)#isu","$1<a   href=$2 target=_blank>$2</a>",$text);


===
太谢谢了,我用你前面那个也可以
return preg_replace("#([^\]])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)(?>=\[)?#isu","$1<a href=$2 target=_blank>$2</a>",$str);

后面那个也可以,谢谢。。。。

#9


还有一个问题,就是前面有=号的怎么处理?就是这种格式:
[url=http://bbs.csdn.net/topics/new?forum_id=PHPBase]

#10


谢谢,我改成这样可以:
echo preg_replace("#([^]|=])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)#isu","$1<a   href=$2 target=_blank>$2</a>",$text);

#1


比如这个:【ubb】http://bbs.csdn.net/topics/new?forum_id=PHPBase【/ubb】

#2


或者说我又要对ubb代码转换,又要对没有被ubb代码包起来的网址自动加上链接,怎么做到?

#3


试试
preg_replace("#(?<!\[ubb\])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)(?!\[\/ubb\])#i","<a   href=\\1 target=_blank>\\1</a>",$text);

#4


$text =<<< TXT
上面是给一段文字里面的网址自动加链接的,但是有的ubb代码的链接不能自动加链接,要怎么排除?因为ubb会自动转换为链接。
比如这个:http://bbs.csdn.net/topics/new?forum_id=PHPBase
比如这个:【ubb】http://bbs.csdn.net/topics/new?forum_id=PHPBase【/ubb】
TXT;
echo preg_replace("#([^】])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)(?>=【)?#isu","$1<a   href=$2 target=_blank>$2</a>",$text);
上面是给一段文字里面的网址自动加链接的,但是有的ubb代码的链接不能自动加链接,要怎么排除?因为ubb会自动转换为链接。
比如这个:<a   href=http://bbs.csdn.net/topics/new?forum_id=PHPBase target=_blank>http://bbs.csdn.net/topics/new?forum_id=PHPBase</a>
比如这个:【ubb】http://bbs.csdn.net/topics/new?forum_id=PHPBase【/ubb】

#5


引用 3 楼 jordan102 的回复:
试试
preg_replace("#(?<!\[ubb\])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)(?!\[\/ubb\])#i","<a   href=\\1 target=_blank>\\1</a>",$text);


好象可以,但是不是[ubb\]标签,上面1楼写错,应该是[img]和[url]这些标签,可以把[ubb\]换成[url\],但只能排除一个标签,怎么写可以排除多个?如还要排除[img\]

#6


引用 4 楼 xuzuning 的回复:
$text =<<< TXT
上面是给一段文字里面的网址自动加链接的,但是有的ubb代码的链接不能自动加链接,要怎么排除?因为ubb会自动转换为链接。
比如这个:http://bbs.csdn.net/topics/new?forum_id=PHPBase
比如这个:【ubb】http://bbs.csdn.net/topics/new?forum_id=PHPBase【/ubb】
TXT;
echo preg_replace("#([^】])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)(?>=【)?#isu","$1<a   href=$2 target=_blank>$2</a>",$text);
上面是给一段文字里面的网址自动加链接的,但是有的ubb代码的链接不能自动加链接,要怎么排除?因为ubb会自动转换为链接。
比如这个:<a   href=http://bbs.csdn.net/topics/new?forum_id=PHPBase target=_blank>http://bbs.csdn.net/topics/new?forum_id=PHPBase</a>
比如这个:【ubb】http://bbs.csdn.net/topics/new?forum_id=PHPBase【/ubb】


====
这个【】号其实是[]这个号,因为个写成[]时在这里会自动转成链接看不到,所以写成【】

#7


你自己换一下不就行了?
$text =<<< TXT
上面是给一段文字里面的网址自动加链接的,但是有的ubb代码的链接不能自动加链接,要怎么排除?因为ubb会自动转换为链接。
比如这个:http://bbs.csdn.net/topics/new?forum_id=PHPBase
比如这个:[ubb]http://bbs.csdn.net/topics/new?forum_id=PHPBase[/ubb]
TXT;
echo preg_replace("#([^]])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)#isu","$1<a   href=$2 target=_blank>$2</a>",$text);

#8


引用 7 楼 xuzuning 的回复:
你自己换一下不就行了?
$text =<<< TXT
上面是给一段文字里面的网址自动加链接的,但是有的ubb代码的链接不能自动加链接,要怎么排除?因为ubb会自动转换为链接。
比如这个:http://bbs.csdn.net/topics/new?forum_id=PHPBase
比如这个:[ubb]http://bbs.csdn.net/topics/new?forum_id=PHPBase[/ubb]
TXT;
echo preg_replace("#([^]])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)#isu","$1<a   href=$2 target=_blank>$2</a>",$text);


===
太谢谢了,我用你前面那个也可以
return preg_replace("#([^\]])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)(?>=\[)?#isu","$1<a href=$2 target=_blank>$2</a>",$str);

后面那个也可以,谢谢。。。。

#9


还有一个问题,就是前面有=号的怎么处理?就是这种格式:
[url=http://bbs.csdn.net/topics/new?forum_id=PHPBase]

#10


谢谢,我改成这样可以:
echo preg_replace("#([^]|=])((mms|http|https|ftp|telnet)(://)[.:@/\w\?\=\-\&\_\#\;\%\,\!\+]+)#isu","$1<a   href=$2 target=_blank>$2</a>",$text);