Last night I refactored a few functions I had put together into a package to convert all URLs, email addresses and FTP addresses in a block of text into clickable HTML anchors. I use it on my microblog when posting - since my posts are automatically reposted to Twitter, which marks up links accordingly, I want to avoid using Markdown for clickable URLs etc.

The package can be installed using Composer:

composer require theprivateer/clickable

To use it, it’s just a matter of passing a string to the static parse method on the class:

require_once 'path/to/composer/autoload.php';

echo \Privateer\Clickable\Clickable::parse('Read my blog at https://philstephens.com');

// Read my blog at <a href="https://philstephens.com" rel="nofollow">https://philstephens.com</a>

Alternatively you can use the str_clickable helper function (also autoloaded by Composer):

require_once 'path/to/composer/autoload.php';

$str = 'Find out more at https://packagist.org/packages/theprivateer/clickable.';

echo str_clickable($str)

// Find out more at <a href="https://packagist.org/packages/theprivateer/clickable" rel="nofollow">https://packagist.org/packages/theprivateer/clickable</a>.

If you pass through a string that already has an anchor tag in it, fear not - the parser will automatically ignore them:

require_once 'path/to/composer/autoload.php';

$str = 'Find out more at <a href="https://packagist.org/packages/theprivateer/clickable" rel="nofollow">https://packagist.org/packages/theprivateer/clickable</a>.';

echo str_clickable($str)

// Find out more at <a href="https://packagist.org/packages/theprivateer/clickable" rel="nofollow">https://packagist.org/packages/theprivateer/clickable</a>.

I’ve still got some documenting to do and a simple test suite to write, but if you want to find out more check it out on Github.