Jump to content

[SOLVED] Preg_replace problem


helraizer

Recommended Posts

Hey folks and folksesses,

 

I have written some code to get emoticons onto my image based shoutbox but there is quite a large bug, as there is with any code in the early stages, and I need your help to narrow it down for me.

 

The idea is that the script pulls data from the database - username, colour, font and shout to print '[username] shout' onto the image. This part of the code all works perfectly. Then it looks through each line at a time to see if there is either :D, :), :P or :( in the shout, if there is it finds the position of the string it's at, uses this data * a number to get the emote to the correct place on the image. After it has found that result and merged the emoticon onto the shoutbox, it deletes the :D, :), :P or :( from that shout, depending on which was used from the shout so that there is no overlapping of text and image.

 

This works fine for the :D - the test post "Yay!! :D" gives this result (top line)

 

test1.gif

 

Whereas the post "Yay!! :P" gives the result

 

test.gif

 

^ it deletes the entire username and shout from the image and merges the :) emoticon into place.

 

showimage_a.php

 

<?php
        $name = "[" . htmlspecialchars_decode($row['username']) . "] "; //it works - returns username
        $font = $row['font']; //it works - renders the colour
        $color = $row['color']; //it works - changes the font
        $line = htmlspecialchars_decode($row['comment']); //it works, posts the shout


        if ($name == "[] ")
        {
            $name = "";

            $line = $name . $line;
        }
        else
        {

            $line = $name . $line;
        }
        
               
if (isset($_SESSION['sad'])) // not entirely implemented, does not register a session yet
        {

            $sad = $_SESSION['sad'];
            $sad_pos = strpos($line, $sad);

		if ($font == "palab") {
        $postb = $sad_pos * 5.4;
        } elseif ($font == "comicsans") {
        $postb = $sad_pos * 6.725;
        } else {
        }
            
            if (stristr($line, $sad))
            {

                imagecopymerge($image, $sad_im, ($cur_line_x + $postb), (($cur_line_y + $lineheight)  - 30), 0,
                    0, 15, 15, 100);
                    
              $line = preg_replace('/:(/', "", $line); 
            }
        }

if (isset($_SESSION['smiley']))
        {

            $smiley = $_SESSION['smiley'];
            $smile_pos = strpos($line, "");

		if ($font == "palab") {
        $posts = $smile_pos * 5.36;
        } elseif ($font == "comicsans") {
        $posts = $smile_pos * 6.725;
        } else {
        }
            
            if (stristr($line, $smiley))
            {

                imagecopymerge($image, $smile_im, ($cur_line_x + $posts), (($cur_line_y + $lineheight) - 30), 0,
                    0, 15, 15, 100);
                    
           $line =  preg_replace('', "", $line); //doesn't render on some occassions due to sessions - not causing this problem.
            }
        }
  

if (isset($_SESSION['tongue']))
        {

            $tongue = $_SESSION['tongue'];
            $ton_pos = strpos($line, $tongue);

		if ($font == "palab") {
        $postt = $ton_pos * 5.1;
        } elseif ($font == "comicsans") {
        $postt = $ton_pos * 6.725;
        } else {
        }
            
            if (stristr($line, $tongue))
            {

                imagecopymerge($image, $tongue_im, ($cur_line_x + $postt), (($cur_line_y + $lineheight) - 30), 0,
                    0, 15, 15, 100);
                    
          $line =  preg_replace('/:P/', "", $line); //For some reason removes the entire $line and adds $smile_im to the image. *confused*
            }
        }


        if (isset($_SESSION['grin'])) {

        $grin = $_SESSION['grin'];
        $pos = strpos($line, $grin);

      if ($font == "palab") {
        $post = $pos * 5.7;
        } elseif ($font == "comicsans") {
        $post = $pos * 6.725;
        } else {
        }

        if (stristr($line, $grin)) {


        imagecopymerge($image, $grin_im, ($cur_line_x + $post), (($cur_line_y + $lineheight)- 30.5), 0, 0,
        15, 15, 100);
        
      $line = preg_replace('/:D/', "", $line); // This bit works fine (gives the first result from Yay!! 

        }

        } 
        

        if ($color == "white" || $color == "yellow" || $color == "green" || $color ==
            "orange" || $color == "aqua")
        {
            Imagettftext($image, 10, 0, $cur_line_x, $cur_line_y, getColor($color), getfont
                ($font), trim($line));


        }
        elseif ($color != "white" || $color != "yellow" || $color != "green" || $color !=
            "orange" || $color != "aqua")
        {
            Imagettftext($image, 10, 0, $cur_line_x, $cur_line_y, $white, getfont($font),
                trim($line));


        }
        elseif ($font == "fixedsys" || $font == "Courbd" || $font == "arial" || $font ==
            "timesnr" || $font == "calibri" || $font == "comicsans" || $font == "palab")
        {
            Imagettftext($image, 10, 0, $cur_line_x, $cur_line_y, getColor($color), getfont
                ($font), trim($line));


        }
        else
        {
            Imagettftext($image, 10, 0, $cur_line_x, $cur_line_y, $white, "courbd.ttf", trim
                ($line));


        }
?>

 

Any ideas?

 

Please reply,

Sam

Link to comment
https://forums.phpfreaks.com/topic/108077-solved-preg_replace-problem/
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.