我的代码:
preg_match_all('(\[(link)\](.*?)\[/(link)\])', $message, $matches);
$matches = $matches[2];
foreach($matches as $match){
//CHECK LINK AND VERIFY
$message = preg_replace('(\[(link)\]('.$match.')\[/(link)\])', '<a href="'.$match.'" target="_blank">'.$match.'</a>', $message);
}
正如您在此处看到的https://mcskripts.dk/forum/id/286 该脚本有效,但不能替换包含()或?
的链接无论如何我都可以解决?
对不起,如果我重新发布,就不知道我是否可以对旧帖子发表评论并得到回复。
答案 0 :(得分:0)
您可以使用一个preg_replace:
$message = preg_replace('~\[link\](.+?)\[/link\]~', '<a href="$1" target="_blank">$1</a>', $message);
如果要在替换之前验证链接,请使用preg_replace_callback:
$message = preg_replace_callback(
'~\[link\](.+?)\[/link\]~',
function($match) {
# call your function to validate the link
if (validate_link($match[1])) {
return '<a href="'.$match[1].'" target="_blank">'.$match[1].'</a>';
} else {
return 'What you want when validation fail!';
}
},
$message
);