Okay, so here's an idea using PHP's function preg_replace_callback
<?php
// SET TEXT TO BE USED
$string = 'some text some text <b>some text</b> some text <a href=http://sometextsometext<b>sometext</b>sometextsometext>text</a> some text some text. And We Have A <a href=http://google.com>Google</a> Link';
// USE A CALLBACK FUNTION TO SCAN THROUGH LINKS
$string = preg_replace_callback('~<a.*?</a>~', 'remove_crap_from_links', $string);
print $string;
// THIS IS THE CALLBACK FUNCTION ... EACH LINK IS STORED AS '$m'
function remove_crap_from_links($m) {
// PULL OUT THE PART OF THE LINK BEFORE THE CLOSING LINK BRACKET
// (USE A NEGATIVE LOOKAHEAD TO MAKE SURE THAT IT CAN'T HAVE ANY OPENING/CLOSING HTML BRACKETS IN THERE
if (preg_match('~<a(.*?)>(?:[^<>]*?)</a>~i', $m[0], $url_matches)) {
// RUN A PHP strip_tags FUNCTION TO PULL OUT ANY HTML TAGS FOUND IN THE LINK BODY
$stripped_url = strip_tags($url_matches[1]);
// REBUILD THE URL, USING THE $stripped_url IN PLACE OF WHAT WAS ALREADY THERE
$clean_url = preg_replace('~(<a)(.*?)(>(?:[^<>]*?)</a>)~', '$1'.$stripped_url.'$3', $m[0]);
}
return $clean_url;
}
So basically, I'm taking the part that has been suggested a couple of times with PHP's strip_tags
function, but only using on parts that it finds inside of link tags.
Here is a working demo
Maybe more info here – Richard Nov 10 '14 at 06:00
Maybe more info here – Richard Nov 10 '14 at 06:01