Search code examples
phphtmlreplaceanchordomdocument

Convert clickable anchor tags to plain text in html document


I am trying to match <a> tags within my content and replace them with the link text followed by the url in square brackets for a print-version.

The following example works if there is only the "href". If the <a> contains another attribute, it matches too much and doesn't return the desired result.

How can I match the URL and the link text and that's it?

Here is my code:

<?php
$content = '<a href="http://www.website.com">This is a text link</a>';
$result = preg_replace('/<a href="(http:\/\/[A-Za-z0-9\\.:\/]{1,})">([\\s\\S]*?)<\/a>/',
     '<strong>\\2</strong> [\\1]', $content);
echo $result;
?> 

Desired result:

<strong>This is a text link </strong> [http://www.website.com]

Solution

  • You can make the match ungreedy using ?. You should also take into account there may be attributes before the href attribute.

    $result = preg_replace('/<a [^>]*?href="(http:\/\/[A-Za-z0-9\\.:\/]+?)">([\\s\\S]*?)<\/a>/',
        '<strong>\\2</strong> [\\1]', $content);