EDITED / FIXED
- Добавлено
str_replace()
для работы с точками в доменных именах - Изначально я исправил обратную косую черту (если вы хотите буквальную обратную косую чертув вашем регулярном выражении это должно быть
\\
в строке), но я отменил это, поскольку вы сказали, что в первую очередь это работает для вас.
Как насчет этого?
$mydomain = 'domain.tld';
$bbcode = array (
"/\[url\=([^]]*)(".str_replace('.','\\.',$mydomain).")([^]]*)\]([^[]*)\[\/url\]/is" => "<a href='$1$2$3' target='top'>$4</a>",
"/\[url\]([^[]*)(".str_replace('.','\\.',$mydomain).")([^[]*)\[\/url\]/is" => "<a href='$1$2$3' target='top'>$1$2$3</a>";
"/\[url\=([^]]*)\]([^[]*)\[\/url]/is" => "<a href='$1' target='_blank'>$2</a>"
"/\[url\]([^[]*)\[\/url\]/is" => "<a href='$1' target='_blank'>$1</a>",
);
Если это сработает для вас, предостережение: не устанавливайте $mydomain
на www.domain.tld
, установите его на domain.tld
, чтобы вы могли перехватить все субдомены.
Вы можетедаже сделать это с несколькими доменами, как это:
$mydomains = array(
'domain.tld',
'anotherdomain.tld',
'sub.yetanotherdomain.tld'
);
// Add domain-specific rules before general rules so we don't match domain
// specific links with the general link rule (we have replaced them by that point)
$domainrules = array();
foreach ($mydomains as $domain) {
$domainrules["/\[url\=([^]]*)(".str_replace('.','\\.',$domain).")([^]]*)\]([^[]*)\[\/url\]/is"] = "<a href='$1$2$3' target='top'>$4</a>";
$domainrules["/\[url\]([^[]*)(".str_replace('.','\\.',$domain).")([^[]*)\[\/url\]/is"] = "<a href='$1$2$3' target='top'>$1$2$3</a>";
}
// This array contains all your static BBCode rules
$staticrules = array(
"/\[url\=([^]]*)\]([^[]*)\[\/url\]/is" => "<a href='$1' target='_blank'>$2</a>",
"/\[url\]([^[]*)\[\/url\]/is" => "<a href='$1' target='_blank'>$1</a>",
"/\[b\]([^[]*)\[\/b\]/is" => "<span class='bold_text'>$1</span>",
...
);
// Make an array that contains all the rules
$bbcode = array_merge($staticrules,$domainrules);