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.