Php generate smileys script

ok i cant seem to get the guestbook to process the smileys before it adds it into a database, below is how i call the smiley_face function

add_post.php



include ("guestbook_functions.php");

//smileys variable in config file turned to 1 which equals on
if ($smileys == 1)
	{
		$guest_comments = smiley_face($guest_comments);
	}

guestbook_functions.php


function smiley_face($message)
{

$sm1  = array( ":?:", ":D", ":?", "8)", ":cry:", ":shock:", ":evil:", ":!:", ":frown:", ":idea:", ":arrow:", ":lol:", ":x", ":mrgreen:", ":|", ":P", ":oops:", ":roll:", ":(", ":)", ":o", ":twisted:", ":wink:" );
$sm2  = array( "question", "biggrin", "confused", "cool", "cry", "eek", "evil", "exclaim", "frown", "idea", "arrow", "lol", "mad", "mrgreen", "neutral", "razz", "redface", "rolleyes", "sad", "smile", "surprised", "twisted", "wink" );
$sm3  = array( ":?:", ":D", ":?", "8)", ":cry:", ":shock:", ":evil:", ":!:", ":frown:", ":idea:", ":arrow:", ":lol:", ":x", ":mrgreen:", ":|", ":P", ": oops :", ":roll:", ":(", ":)", ":o", ":twisted:", ":wink:" );

         // Inserting smiley faces for guestbook users

         for ($i=0; $i<=22; $i++)
         {
                $message = str_replace($sm1[$i], "<img src=\\"../images/smileys/icon_$sm2[$i].gif\\" ALT=\\"$sm3[$i]\\">", $message);
         }
		
         return $message;
}

it just outputs the smiley that i enter into the database instead of the image link, any help would be much appreciated thanks

Well, I do it a bit different way.

I use strtr() function for this purpose:

$text = 'Bigsmile:D, Just smile:), Sad face:(';
$smileys = array(':D' => '<img src="bigsmile.gif" />', ':)' => '<img src="justsmile.gif" />', ':(' => '<img src="sadface.gif" />');
$text = strtr($text, $smileys);

You just define which strings to replace with which images and you’re done.

thanks for your post, ill give that way a go :), i just cannot understand why my version aint working as i cannot see anything wrong with it, anyone else any ideas?

Theres no need for a loop, str_replace may have two arrays as arguments :


function smiley_face($message)
{

$sm1  = array( ":?:", ":D", ":?", "8)", ":cry:", ":shock:", ":evil:", ":!:", ":frown:", ":idea:", ":arrow:", ":lol:", ":x", ":mrgreen:", ":|", ":P", ":oops:", ":roll:", ":(", ":)", ":o", ":twisted:", ":wink:" );
$sm2  = array( "question", "biggrin", "confused", "cool", "cry", "eek", "evil", "exclaim", "frown", "idea", "arrow", "lol", "mad", "mrgreen", "neutral", "razz", "redface", "rolleyes", "sad", "smile", "surprised", "twisted", "wink" );
         // Inserting smiley faces for guestbook users
         $message = str_replace($sm1, $sm2, $message);
         return $message;
}

Cheers

still cant get it to work with both those above methods, i understand what i need to do but just cant seem to get it to work

Does this work?


function smiley_face($message) 
{ 
 
$sm1 = array( ":?:", ":D", ":?", "8)", ":cry:", ":shock:", ":evil:", ":!:", ":frown:", ":idea:", ":arrow:", ":lol:", ":x", ":mrgreen:", ":|", ":P", ":oops:", ":roll:", ":(", ":)", ":o", ":twisted:", ":wink:" ); 
$sm2 = array( "question", "biggrin", "confused", "cool", "cry", "eek", "evil", "exclaim", "frown", "idea", "arrow", "lol", "mad", "mrgreen", "neutral", "razz", "redface", "rolleyes", "sad", "smile", "surprised", "twisted", "wink" ); 
 
// Inserting smiley faces for guestbook users 
$message = str_replace($sm1, '<img src="../images/smileys/icon_'. $sm2 .'.gif alt="'. $sm2 .'"', $message); 
 
return $message; 
}

its ok ive got it to work using the method below


function smiley_faces($message)
{
$smileys = array( ':?:' => '<img src="../images/smileys/icon_question.gif">',
				':D' => '<img src="../images/smileys/icon_biggrin.gif">',
				':?' => '<img src="../images/smileys/icon_confused.gif">',
				'8)' => '<img src="../images/smileys/icon_cool.gif">',
				':cry:' => '<img src="../images/smileys/icon_cry.gif">',
				':shock:' => '<img src="../images/smileys/icon_eek.gif">',
				':evil:' => '<img src="../images/smileys/icon_evil.gif">',
				':!:' => '<img src="../images/smileys/icon_exclaim.gif">',
				':frown:' => '<img src="../images/smileys/icon_frown.gif">',
				':idea:' => '<img src="../images/smileys/icon_idea.gif">',
				':arrow:' => '<img src="../images/smileys/icon_arrow.gif">',
				':lol:' => '<img src="../images/smileys/icon_lol.gif">',
				':x' => '<img src="../images/smileys/icon_mad.gif">',
				':mrgreen:' => '<img src="../images/smileys/icon_mrgreen.gif">',
				':|' => '<img src="../images/smileys/icon_neutral.gif">',
				':p' => '<img src="../images/smileys/icon_razz.gif">',
				':oops:' => '<img src="../images/smileys/icon_redface.gif">',
				':roll:' => '<img src="../images/smileys/icon_rolleyes.gif">',
				':(' => '<img src="../images/smileys/icon_sad.gif">',
				':)' => '<img src="../images/smileys/icon_smile.gif">',
				':o' => '<img src="../images/smileys/icon_surprised.gif">',
				':twisted:' => '<img src="../images/smileys/icon_twisted.gif">',
				':wink:' => '<img src="../images/smileys/icon_wink.gif">');

foreach($smileys as $smiley=>$image)
		{
			$message = str_replace($smiley, $image, $message); 		
		}
	
	return $message;
}

thanks for all the help

I must say, you’re using loops where you don’t have to. You can just use strtr() function to replace this loop:

function smiley_faces($message)
{
$smileys = array( ':?:' => '<img src="../images/smileys/icon_question.gif">',
                ':D' => '<img src="../images/smileys/icon_biggrin.gif">',
                ':?' => '<img src="../images/smileys/icon_confused.gif">',
                '8)' => '<img src="../images/smileys/icon_cool.gif">',
                ':cry:' => '<img src="../images/smileys/icon_cry.gif">',
                ':shock:' => '<img src="../images/smileys/icon_eek.gif">',
                ':evil:' => '<img src="../images/smileys/icon_evil.gif">',
                ':!:' => '<img src="../images/smileys/icon_exclaim.gif">',
                ':frown:' => '<img src="../images/smileys/icon_frown.gif">',
                ':idea:' => '<img src="../images/smileys/icon_idea.gif">',
                ':arrow:' => '<img src="../images/smileys/icon_arrow.gif">',
                ':lol:' => '<img src="../images/smileys/icon_lol.gif">',
                ':x' => '<img src="../images/smileys/icon_mad.gif">',
                ':mrgreen:' => '<img src="../images/smileys/icon_mrgreen.gif">',
                ':|' => '<img src="../images/smileys/icon_neutral.gif">',
                ':p' => '<img src="../images/smileys/icon_razz.gif">',
                ':oops:' => '<img src="../images/smileys/icon_redface.gif">',
                ':roll:' => '<img src="../images/smileys/icon_rolleyes.gif">',
                ':(' => '<img src="../images/smileys/icon_sad.gif">',
                ':)' => '<img src="../images/smileys/icon_smile.gif">',
                ':o' => '<img src="../images/smileys/icon_surprised.gif">',
                ':twisted:' => '<img src="../images/smileys/icon_twisted.gif">',
                ':wink:' => '<img src="../images/smileys/icon_wink.gif">');

        $message = strtr($message, $smileys);


    return $message;
}

thanks, for some reason i felt that i had to loop through the array to check each one, ive sorted it now to use your method above and that works fine and is more efficient, so thanks :slight_smile: