I need some help making a function that would parse a string of text and replace text like http://google.com with <a href="http://google.com">http://google.com</a> and it would have to support full urls so like anything after http:// until the next space?
Would RegEx be able to help in this area or could this be achieved with simple string manipulation functions in PHP?
Just like the functionality in forums whereas if you type a link without proper bbcode surrounding it the forum automatically parses it.
Add href tag to text links
Moderator: General Moderators
Re: Add href tag to text links
Set of functions I use:
Useage:
Code: Select all
<?php
function autolink( &$text, $target='_blank', $nofollow=true )
{
// grab anything that looks like a URL...
$urls = _autolink_find_URLS( $text );
if( !empty($urls) ) // i.e. there were some URLS found in the text
{
array_walk( $urls, '_autolink_create_html_tags', array('target'=>$target, 'nofollow'=>$nofollow) );
$text = strtr( $text, $urls );
}
}
function _autolink_find_URLS( $text )
{
// build the patterns
$scheme = '(http:\/\/|https:\/\/)';
$www = 'www\.';
$ip = '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}';
$subdomain = '[-a-z0-9_]+\.';
$name = '[a-z][-a-z0-9]+\.';
$tld = '[a-z]+(\.[a-z]{2,2})?';
$the_rest = '\/?[a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1}';
$pattern = "$scheme?(?(1)($ip|($subdomain)?$name$tld)|($www$name$tld))$the_rest";
$pattern = '/'.$pattern.'/is';
$c = preg_match_all( $pattern, $text, $m );
unset( $text, $scheme, $www, $ip, $subdomain, $name, $tld, $the_rest, $pattern );
if( $c )
{
return( array_flip($m[0]) );
}
return( array() );
}
function _autolink_create_html_tags( &$value, $key, $other=null )
{
$target = $nofollow = null;
if( is_array($other) )
{
$target = ( $other['target'] ? " target=\"$other[target]\"" : null );
// see: http://www.google.com/googleblog/2005/0 ... -spam.html
$nofollow = ( $other['nofollow'] ? ' rel="nofollow"' : null );
}
$value = "<a href=\"$key\"$target$nofollow>$key</a>";
}
?>Code: Select all
$text = 'oh hi there http://google.com nice blog http://www.mike-griffiths.co.uk oh very good';
$text = htmlentities($text);
autolink($text);Re: Add href tag to text links
Why thank you. This has helped me greatly. I am appreciative of the thoroughness of the code.
Re: Add href tag to text links
Very welcome