使用 preg 替换来格式化 URL



我有一个正则表达式,它像bbcode一样接受字符串并将其转换为html链接。它工作正常。但是,我想让它检测链接的类型(内部/外部),以决定是像http://extsite.com/category/keyword/那样严格使用绝对(外部)URL,还是像category/keyword/一样使用内部URL的一部分并将其附加到预定义的URL,例如$url . category/keyword/

正则表达式如下:

preg_replace('/[([^]]+)][([^]"]+)]/i', '<a href="$2">$1</a>', $text)

任何建议将不胜感激。

根据您的评论,我将假设任何以 http://(或任何类似协议,例如 ftp://)开头的链接都是绝对链接。任何其他链接将被视为相对链接(并以 $url 为前缀)

// replace absolute links
$text = preg replace ('/[([^]]+)][([A-Za-z]+://[^]"]+)]/i',
                      '<a href="$2">$1</a>', $text )

// replace all remaining (relative) links
// $url must have a tailing slash '/'
$text = preg replace ('/[([^]]+)][([^]"]+)]/i',
                      '<a href="'.$url.'$2">$1</a>', $text )

最新更新