Auto Paragraph Function with URL Parsing and Smilie Detection

πŸ‘‹ Ciprian on Saturday, August 29, 2020 in Blog
Last modified on Thursday, August 27, 2020

Learn JavaScript by example. Code snippets, how-to's and tutorials. Try now!

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. Last modified on Thursday, August 27, 2020.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Privacy Policy