Emoticon Befehle mit den entsprechenden Links ersetzen

X-shunin

Grünschnabel
Hiyo~

dies ist mein erster Post hier (nur'n Sidenote :P)

also ich habe hier ein großes Problem mit einem Stück PHP Code. Mein Kollege (der sich besser mit PHP auskennt als ich) ist auch schon am verzweifeln. Also hier das Problemkind:
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Emoticon</title>
<script language="JavaScript">
var onoff = 0;
function mysmilie(textfeldid, smilie)
{
	var field = document.getElementById(textfeldid);
	field.value = field.value + smilie;
	field.focus();
}

function show()
{
	var table = document.getElementById('emoticons');
	var button = document.getElementById('button');
		if(onoff == 0)
		{
			table.style.display='block';
			onoff = 1;
			button.value="Hide emoticons";
		}else{
			table.style.display='none';
			onoff = 0;
			button.value="Show emoticons";
		}
}
</script>
<style type="text/css">
#emoticons {
	height:auto;
	width:auto;
	background:none;
	display:none;
}

img {
	border:none;
}
</style>
</head>

<body>
<form action="emoticons.php" method="post">
<textarea cols="50" rows="5" name="text" id="text"></textarea>
<input type="submit" name="send" value="Lol xD" />
<input type="button" id="button" value="Show emoticons" onclick="show()" />
	<table id="emoticons">
    	<tr>
			<?php
				$i = 0;
                foreach (glob('emoticons/*.*') as $emopath)
                {
                    $emoticon = str_replace('emoticons/','',$emopath);
                    $type=explode(".",$emoticon);
					if($i==10)
					{
						echo '</tr><tr>
								<td>
									<a href="javascript:mysmilie(\'text\',\':'.$type[0].':\')"><img src="'.$emopath.'" /></a>
								</td>';
						$emoarray1[] = ':'.$type[0].':';
						$emoarray2[] = '<img src="'.$emopath.'" />'; 
						$i = 1;
					}else{
						echo '<td>
							<a href="javascript:mysmilie(\'text\',\':'.$type[0].':\')"><img src="'.$emopath.'" /></a>
							</td>';
						$emoarray1[] = ':'.$type[0].':';
						$emoarray2[] = '<img src="'.$emopath.'" />';					
						$i++;
					}
                }
				count($emoarray1);
            ?>
         </tr>
  	</table>
</form>
<?php
if(isset($_POST['send']) || $_POST['text']!='')
{
	$text = $_POST['text'];
	$i2 = count($emoarray1);
	$i3 = 0;
	while($i3 < $i2)
	{
		$new_text = str_replace($emoarray1[$i3],$emoarray2[$i3], $text); // PROBLEMZEILE!
		$i3++;
	}
	echo $new_text;
} else {
	echo 'Bitte Text eingeben';
}
?>
</body>
</html>

Er findet in der Problemzeile keine Übereinstimmung und gibt somit nichts aus.
Wir haben schon alle möglichen Tests angestellt... aber es kam nie etwas bei rum.
Wenn man die Zeile "manuell" (also ohne variabeln) eingibt:
PHP:
$new_text = str_replace(:brb:,<img src="emoticons/brb.png" />, $text);

Dann funktioniert es...
Aber da ich 78 Emoticons in Ordner habe (und das Skript der Allgemeinheit dienen soll, die vielleicht 200 Emoticons hat) müsste ich diese "manuelle" Zeile 78 (oder halt 200 mal) eingeben.

Also entweder sehen wir den Wald vor lauter Bäumen nicht oder irgendwie is da was faul.

Ich hoffe mir wird hier geholfen.
 
Zuletzt bearbeitet:
Ich würde primäre mal die die Bezeichner abändern, damit die Übersicht besser wird. D.h. "$i2" in "$j", die anderen Variablen dann ebenso anpassen.

Um dann den Fehler zu lokalisieren, gibt doch einfach mal die einzelnen Werte aus bevor du die Funktion "str_replace()" benutzt. Dadruch könntest du vielleicht den Fehler besser finden...
 
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Emoticon</title>
<script language="JavaScript">
var onoff = 0;
function mysmilie(textfeldid, smilie)
{
    var field = document.getElementById(textfeldid);
    field.value = field.value + smilie;
    field.focus();
}

function show()
{
    var table = document.getElementById('emoticons');
    var button = document.getElementById('button');
        if(onoff == 0)
        {
            table.style.display='block';
            onoff = 1;
            button.value="Hide emoticons";
        }else{
            table.style.display='none';
            onoff = 0;
            button.value="Show emoticons";
        }
}
</script>
<style type="text/css">
#emoticons {
    height:auto;
    width:auto;
    background:none;
    display:none;
}

img {
    border:none;
}
</style>
</head>

<body>
<form action="test.php" method="post">
<textarea cols="50" rows="5" name="text" id="text"></textarea>
<input type="submit" name="send" value="Lol xD" />
<input type="button" id="button" value="Show emoticons" onclick="show()" />
    <table id="emoticons">
        <tr>
            <?php
                $i = 0;
                foreach (glob('phpBB3/images/smilies/*') as $emopath)
                {
					$emoticon = substr(strrchr($emopath, '/'), 1, -strlen(strrchr($emopath, '.'))); 
					if($i==10)
                    {
                        echo '</tr><tr>
                                <td>
                                    <a href="javascript:mysmilie(\'text\',\':'.$emoticon.':\')"><img src="'.$emopath.'" /></a>
                                </td>';
                        $emoarray1[] = ':'.$emoticon.':';
                        $emoarray2[] = '<img src="'.$emopath.'" />'; 
                        $i = 1;
                    }else{
                        echo '<td>
                            <a href="javascript:mysmilie(\'text\',\':'.$emoticon.':\')"><img src="'.$emopath.'" /></a>
                            </td>';
                        $emoarray1[] = ':'.$emoticon.':';
                        $emoarray2[] = '<img src="'.$emopath.'" />';                    
                        $i++;
                    }
                }
                count($emoarray1);
            ?>
         </tr>
      </table>
</form>
<?php
if(isset($_POST['send']) || $_POST['text']!='')
{
    $text = $_POST['text'];
    $text = str_replace($emoarray1, $emoarray2, $text);
    echo $text;
} else {
    echo 'Bitte Text eingeben';
}
?>
</body>
</html>
Okay, also...
Ich hab mal deine Methode für den Dateinamen verbessert.
[phpf]str_replace[/phpf] akzeptiert auch Arrays also ist deine letzte Schleife unnötig gewesen. Funktioniert bei mir lokal.
 
Zurück