Auto Paragraph Function with URL Parsing and Smilie Detection

This function emulates WordPress wpautop() function for custom PHP scripts, parses URL addresses and adds smilies/emoticons. If you’re coding your own CMS or string parsing library, it could be useful.

Note: Smilies not included 😢

  • First of all, the function changes 2 line breaks (HTML <br>) into a paragraph.
  • Second, the function changes the remaining single line breaks into HTML <br>, making a SHIFT+ENTER new line.
  • Third, the function parses text URLs and adds hyperlinks and detects preset smilies/emoticons from a function array.
<?php
function smilieMe($text) {
	$smiliesFind = [
		'/:\)/',
		'/:P/',
		'/:D/',
		'/:S/',
		'/:\(/',
		'/:8/',
		'/:tea/',
		'/:o/',
		'/:O/',
		'/:q/',
		'/:Q/',
		'/:hug/',
		'/:joy/',
		'/:yes/',
		'/:no/'
	];
	$smiliesReplace = [
		'<img src="images/smilies/smile.png" alt=":)" title=":)" loading="lazy"',
		'<img src="images/smilies/tongue.png" alt=":P" title=":P" loading="lazy"',
		'<img src="images/smilies/grin.png" alt=":D" title=":D" loading="lazy"',
		'<img src="images/smilies/confused.png" alt=":S" title=":S" loading="lazy"',
		'<img src="images/smilies/sad.png" alt=":(" title=":(" loading="lazy"',
		'<img src="images/smilies/proud.png" alt=":8" title=":8" loading="lazy"',
		'<img src="images/smilies/tea.gif" alt=":tea" title=":tea" loading="lazy"',
		'<img src="images/smilies/wow.png" alt=":o" title=":o" loading="lazy"',
		'<img src="images/smilies/wow.png" alt=":O" title=":O" loading="lazy"',
		'<img src="images/smilies/yay.png" alt=":q" title=":q" loading="lazy"',
		'<img src="images/smilies/yay.png" alt=":Q" title=":Q" loading="lazy"',
		'<img src="images/smilies/hug.gif" alt=":hug" title=":hug" loading="lazy"',
		'<img src="images/smilies/joy.gif" alt=":joy" title=":joy" loading="lazy"',
		'<img src="images/smilies/yes.gif" alt=":yes" title=":yes" loading="lazy"',
		'<img src="images/smilies/no.gif" alt=":no" title=":no" loading="lazy"'
	];

    return preg_replace($smiliesFind, $smiliesReplace, $text);
}

function autopMe($content) {
	$content = trim($content);
	$content = stripslashes($content);

	/*
	 * temporarily replace two or more consecutive newlines
	 * into SOH characters (Start of Heading - first character of a message header)
	 */
	$content = preg_replace('~(\r\n|\n){2,}|$~', "\001", $content);

	// convert remaining single newlines into HTML <br>
	$content = nl2br($content);

	// replace SOH characters with paragraphs
	$content = preg_replace('/(.*?)\001/s', "<p>$1</p>\n", $content);

	$content = smilieMe($content);

	// parse URL addresses (ftp, http, https)
	$content = preg_replace('*(f|ht)tps?://[A-Za-z0-9\./?=\+&%]+*', '<a href="$0">$0</a>', $content);

	return $content;
}

As a bonus, the smilies are lazy loaded.

Added by Ciprian on Saturday, August 29, 2020 in Blog

Unlimited Automated Page Speed Monitoring & Tracking.
Use SpeedFactor to track your website. It’s simple and reliable.
See how real people experience the speed of your website. Then find (and fix) your web performance problems.
Get Started

Related Articles

Privacy Policy