preg_replace用[link]和[/ link]之间的超链接替换url,但是链接不能包含吗?要么 ()

时间:2018-07-18 09:49:43

标签: php preg-replace

我的代码:

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 该脚本有效,但不能替换包含()或?

的链接

无论如何我都可以解决?

对不起,如果我重新发布,就不知道我是否可以对旧帖子发表评论并得到回复。

1 个答案:

答案 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
       );