Мне нужна функция для автоматического добавления bbcode.
Я могу сделать это. Но редактор bbcode может использовать 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://)[-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]
Код для обработки [img] без проверки протокола:
<?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;
}
Я пробовал что-то попроще:
function linkAdd($content)
{
$pattern ='(
(?:\[url\])?
(
(?<!url=)
(?:f|ht)tps?://
[-a-z0-9@:%_/+.~#?&=]+
)
(?:\[/url\])?
)xi';
$str=preg_replace($pattern,'[url]\\1[/url]',$content);
return $str;
}
Спасибо 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;
}