我需要一个自动添加bbcode的功能。
我能做到。但是bbcode编辑器可能使用2格式网址
一个。 [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://)[-a-zA-Z0-9@:%_/+.~#?&//=]+)','[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]
答案 0 :(得分:2)
我尝试过更简单的事情:
function linkAdd($content)
{
$pattern ='(
(?:\[url\])?
(
(?<!url=)
(?:f|ht)tps?://
[-a-z0-9@:%_/+.~#?&=]+
)
(?:\[/url\])?
)xi';
$str=preg_replace($pattern,'[url]\\1[/url]',$content);
return $str;
}
答案 1 :(得分:0)
没有协议检查的[图像]处理代码:
<?php
$content="http://www.google.com/logo.png
[url]http://www.yahoo.com[/url]
[url=http://yahoo.com/abc.zip]DownLoad[/url]
[img]google.com/logo.png[/img]";
//$content="[img]google.com/logo.png[/img]";
//$content = nl2br($content);
echo linkAdd($content);
echo PHP_EOL;
//auto add link
function linkAdd($content)
{
$pattern ='(
(?:\[url\])?
(
(?<!url=)
(?:f|ht)tps?://
[-a-z0-9@:%_/+.~#?&=]+
)
(?:\[/url\])?
)xi';
$str=preg_replace($pattern,'[url]$1[/url]',$content);
$pattern ='(
(?:\[img\])
([-a-z0-9@:%_/+.~#?&=]+)
(?:\[/img\])
)xi';
$str=preg_replace($pattern,'[img][url]$1[/url][/img]',$content);
return $str;
}
答案 2 :(得分:0)
谢谢jmleroux
这段代码编辑形成了你的答案,这是我的意思。
非常感谢!
function linkAdd($content)
{
$pattern ='(
(?:\[url\])?
(
(?<!url=)
(?:f|ht)tps?://
[-a-z0-9@:%_/+.~#?&=]+
)
(?:\[/url\])?
)xi';
$str=preg_replace($pattern,'[url]$1[/url]',$content);
$pattern ='(
(?:\[img\])
([-a-z0-9@:%_/+.~#?&=]+)
(?:\[/img\])
)xi';
$str=preg_replace($pattern,'[img]$1[/img]',$str);
return $str;
}