查找所有超链接并在文本中添加另一个重定向链接

时间:2018-12-08 13:38:30

标签: php regex

我想在文本中找到所有超链接,并添加一个链接重定向到每个链接 示例文字

Hello Visit our website <a href="http://example.com">Here</a>

我想要的结果是

Hello Visit our website <a href="https://mywebsite.com?q=http://example.com">Here</a>

我尝试过的代码

    $reg_exUrl = "/<a\s[^>]*href=(\\\" ??)([^\\\" >]*?)\\1[^>]*>(.*)<\/a>/siU";
$text = 'Hello visit our website <a href="https://example.com">Book</a>';
if(preg_match($reg_exUrl, $text, $url)) {
    echo preg_replace($reg_exUrl, '<a href="http://mywebsite.com?q='.$url[0].'">'.$url[2].'</a>', $text);

} else {
    echo $text;
}

所以我的代码的结果是

Hello visit our website Book">https://example.com

HTML检查中的哪个

Hello visit our website <a href="http://mywebsite.com?q=<a href="https://example.com">Book</a>">https://example.com</a>

2 个答案:

答案 0 :(得分:0)

没有其他属性时:

$string = preg_replace('~<a href="[^"]+">~', '<a href="#">', $string); 

否则:

$string = preg_replace('~<a ([^>]*)href="[^"]+"([^>]*)>~', '<a \\1href="#"\\2>', $string); 

演示:

php > $string = 'text....<a asd="blub" href="orig-link" title="bla"> Link text </a> other text .....'; 
php > echo preg_replace('~<a ([^>]*)href="[^"]+"([^>]*)>~', '<a \\1href="#"\\2>', $string); text....<a asd="blub" href="#" title="bla"> Link text </a> other text

答案 1 :(得分:0)

$text = preg_replace_callback('@(<a[^>]+href=")([^"]+)(")@', 'add_track_callback', $text);

function add_track_callback($matches){
    $track_url_base = 'https://mywebsite.com?q=';
    return $matches[1] . $track_url_base . urlencode($matches[2]) . $matches[3];
}

根据需要更改$track_url_base