Question

I wanted to put some nice looking smileys in my chat on my site, but unfortunately the "<3" array to put a heart smiley in my chat doesn't work for some reason, all the other ones work fine, I think the "<" is causing this problem. But I don't know how to fix this, take a look in the code below:

$patterns = array(':)', ':D', ':p', ':P', ':(', '(aapje)', '8)', '<3');
$replacements = array('<img src="smiles/smile.gif"/>', '<img src="smiles/bigsmile.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/sad.png"/>', '<img src="smiles/aapje.png"/>', '<img src="smiles/nerd.png"/>', '<img src="smiles/love.png"/>');

$message = str_replace($patterns, $replacements, $message);

code update

$patterns = array(':)', ':D', ':p', ':P', ':(', '(aapje)', '8)', '/</3', '(l)');
         $replacements = array('<img src="smiles/smile.gif"/>', '<img src="smiles/bigsmile.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/sad.png"/>', '<img src="smiles/aapje.png"/>', '<img src="smiles/nerd.png"/>', '<img src="smiles/love.png"/>', '<img src="smiles/love.png"/>');
         $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
         $blankexp = "/^\n/";
         $message = htmlentities(strip_tags($_POST['message']), ENT_QUOTES);

         if (!preg_match($blankexp, $message)) {

             if (preg_match($reg_exUrl, $message, $url)) {
                $message = preg_replace($reg_exUrl, '<a href="'.$url[0].'" target="_blank">'.$url[0].'</a>', $message);
             } 
             $message = str_replace($patterns, $replacements, $message);

Thx and Grts.

Was it helpful?

Solution

It may be due to < sign. Try html entity for <- use &lt;

Following code should work:

$message = htmlspecialchars("Love Smiley <3");
$patterns = array(':)', ':D', ':p', ':P', ':(', '(aapje)', '8)', '&lt;3');
$replacements = array('<img src="smiles/smile.gif"/>', '<img src="smiles/bigsmile.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/sad.png"/>', '<img src="smiles/aapje.png"/>', '<img src="smiles/nerd.png"/>', '<img src="smiles/love.png"/>');

$message = str_replace($patterns, $replacements, $message);

echo $message;

OTHER TIPS

Try changing < to &lt; - I'd imagine your code is trying to parse anything after it as a tag.

Use &lt; instead of <:

$message = htmlspecialchars("I love you!!! <3 <3 <3"); // defining message

$patterns = array(':)', ':D', ':p', ':P', ':(', '(aapje)', '8)', '&lt;3');
$replacements = array('<img src="smiles/smile.gif"/>', '<img src="smiles/bigsmile.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/tongue.png"/>', '<img src="smiles/sad.png"/>', '<img src="smiles/aapje.png"/>', '<img src="smiles/nerd.png"/>', '<img src="smiles/love.png"/>');    
$message = str_replace($patterns, $replacements, $message);

echo $message;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top