Найти все гиперссылки и добавить еще одну ссылку перенаправления в тексте - PullRequest
0 голосов
/ 08 декабря 2018

Я хочу найти все гиперссылки в тексте и добавить ссылку для перенаправления на каждую ссылку. Пример текста

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 голосов
/ 08 декабря 2018
$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 по мере необходимости.

0 голосов
/ 08 декабря 2018

Когда нет других атрибутов:

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...