Blogs

Blogs

Make URL in content

This is very useful function to make url in your content.
E.x : When user copy any link or url from outside and paste in your editor. that won’t be considered as “<a>” by default. It will consider text instead of URL. In that case, you need to make link manually. but that is very difficulty to manage all time. So, At that time, This function will solve everybody’s issue to make URL.

How It will work?
– This function will find url or matching cases like (www.https,http, etc) and try to make it URL before save and then save all content with url in to you DB. Or It will depend on your function call activities.
– On Front site, When Users will see content, they can see link up URL with “<a>” tag and they can easily access as that.

Supporting cases :
– Basically, It will cover all most URL type link http, https, www, FTP, etc

Notes :
– This function is written for PHP code. If you will need it for other programming languages, you can setup and modify it according to your use.

 

public function make_clickable($ret) {
	$ret = ' ' . $ret;
	// in testing, using arrays here was found to be faster
	$ret = preg_replace_callback('#([\s>])([\w]+?://[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is', array($this, '_make_url_clickable_cb'), $ret);
	$ret = preg_replace_callback('#([\s>])((www|ftp)\.[\w\\x80-\\xff\#$%&~/.\-;:=,?@\[\]+]*)#is', array($this, '_make_web_ftp_clickable_cb'), $ret);
	$ret = preg_replace_callback('#([\s>])([.0-9a-z_+-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,})#i', array($this, '_make_email_clickable_cb'), $ret);

	// this one is not in an array because we need it to run last, for cleanup of accidental links within links
	$ret = preg_replace("#(<a( [^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i", "$1$3</a>", $ret);
	$ret = trim($ret);
	
	return $ret;
	
}

public function _make_url_clickable_cb($matches) {
	$ret = '';
	$url = $matches[2];

	if (empty($url))
		return $matches[0];
	// removed trailing [.,;:] from URL
	if (in_array(substr($url, -1), array(
				'.',
				',',
				';',
				':'
			)) === true) {
		$ret = substr($url, -1);
		$url = substr($url, 0, strlen($url) - 1);
	}
	return $matches[1] . "<a href=\"$url\" target=\"_blank\" rel=\"nofollow\">$url</a>" . $ret;
}

public function _make_web_ftp_clickable_cb($matches) {
	$ret = '';
	$dest = $matches[2];
	$dest = 'http://' . $dest;

	if (empty($dest))
		return $matches[0];
	// removed trailing [,;:] from URL
	if (in_array(substr($dest, -1), array(
				'.',
				',',
				';',
				':'
			)) === true) {
		$ret = substr($dest, -1);
		$dest = substr($dest, 0, strlen($dest) - 1);
	}
	return $matches[1] . "<a href=\"$dest\" target=\"_blank\" rel=\"nofollow\">$dest</a>" . $ret;
}

public function _make_email_clickable_cb($matches) {
	$email = $matches[2] . '@' . $matches[3];
	return $matches[1] . "<a href=\"mailto:$email\">$email</a>";
}