我想在文本中找到所有超链接,并添加一个链接重定向到每个链接 示例文字
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>
答案 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
。